๐Ÿ“š ์ •๋ ฌ(Sorting)

์ •๋ ฌ(Sorting) ์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ.

  • ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜.
  • ์ด์ง„ ํƒ์ƒ‰์˜ ์ „์ฒ˜๋ฆฌ ๊ณผ์ • ์ด๊ธฐ๋„ ํ•จ.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ณต์‹์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋จ.

1) ์„ ํƒ ์ •๋ ฌ (Selection Sort)

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ, ์ด ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณต.

  • ๊ฐ€์žฅ ์›์‹œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ โ€˜๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒโ€™ ํ•œ๋‹ค๋Š” ์˜๋ฏธ.
  • ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒํ•ด์„œ ์•ž์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด, ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง.

์„ ํƒ ์ •๋ ฌ ๊ทธ๋ฆผ ์„ค๋ช…

์„ ํƒ์ •๋ ฌ

์„ ํƒ ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ ๊ตฌํ˜„

array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

for i in range(len(array)):
	min_index = i # ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ์˜ ์ธ๋ฑ์Šค
    for j in range(i + 1, len(array)):
    	if array[min_index] > array[j]:
        	min_index = j
    array[i], array[min_index] = array[min_index], array[i] # ์Šค์™€ํ”„

print(array)

ํŒŒ์ด์ฌ ์Šค์™€์ดํ”„


# 0 ์ธ๋ฑ์Šค์™€ 1 ์ธ๋ฑ์Šค์˜ ์›์†Œ ๊ต์ฒดํ•˜๊ธฐ
array = [3, 5]
array[0], array[1] = array[1], array[0]

print(array)

์‹คํ–‰ ๊ฒฐ๊ณผ

0 1 2 3 4 5 6 7 8 9

์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์„ ํƒ ์ •๋ ฌ์€ N๋ฒˆ ๋งŒํผ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๋งจ ์•ž์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค.
  • ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ ์‚ฌ์†Œํ•œ ์˜ค์ฐจ๋Š” ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ „์ฒด ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๐‘ + (๐‘ - 1) + (๐‘ - 2) + โ€ฆ + 2

  • ์ด๋Š” (๐‘ยฒ + ๐‘ - 2) / 2 ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์— ๋”ฐ๋ผ์„œ O(Nยฒ) ์ด๋ผ๊ณ  ์ž‘์„ฑํ•œ๋‹ค.

์„ ํƒ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ 10,000๊ฐœ ์ด์ƒ์ด๋ฉด ์ •๋ ฌ ์†๋„๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋А๋ ค์ง„๋‹ค.

ํŒŒ์ด์ฌ์— ๋‚ด์žฅ๋œ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ C ์–ธ์–ด ๊ธฐ๋ฐ˜, ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ํ…Œํฌ๋‹‰์ด ํฌํ•จ๋˜์–ด ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

์„ ํƒ ์ •๋ ฌ์€ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•ด ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.


2) ์‚ฝ์ž… ์ •๋ ฌ (Insertion Sort)

์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณจ๋ผ ์ ์ ˆํ•œ ์œ„์น˜์— โ€˜์‚ฝ์ž…โ€™ํ•œ๋‹ค.

  • ์„ ํƒ ์ •๋ ฌ์— ๋น„ํ•ด ๊ตฌํ˜„ ๋‚œ์ด๋„๊ฐ€ ๋†’์€ ํŽธ์ด์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์ ˆํ•œ ์œ„์น˜์— ๋“ค์–ด๊ฐ€๊ธฐ ์ด์ „์—, ๊ทธ ์•ž๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •.

  • ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์‹œ์ž‘.
    • ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ ์ž์ฒด๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์‚ฝ์ž… ์ •๋ ฌ ๊ทธ๋ฆผ ์„ค๋ช…

์‚ฝ์ž…์ •๋ ฌ

์‚ฝ์ž… ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ

array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]

for i in range(1, len(array)):
	for j in range(i, 0, -1): # ์ธ๋ฑ์Šค i๋ถ€ํ„ฐ 1๊นŒ์ง€ ๊ฐ์†Œํ•˜๋ฉฐ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฌธ๋ฒ•
    	if array[j] < array[j - 1]: # ํ•œ ์นธ์”ฉ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
        	array[j], array[j - 1] = array[j - 1], array[j]
        else: # ์ž๊ธฐ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ทธ ์œ„์น˜์—์„œ ๋ฉˆ์ถค
        	break

print(array)

์‹คํ–‰ ๊ฒฐ๊ณผ

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์‚ฝ์ž… ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(Nยฒ) ์ด๋ฉฐ, ์„ ํƒ ์ •๋ ฌ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

  • ์‚ฝ์ž… ์ •๋ ฌ์€ ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

  • ์ตœ์„ ์˜ ๊ฒฝ์šฐ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ ์„ ํƒ ์ •๋ ฌ์— ๋น„ํ•ด ๋” ํšจ์œจ์ .

  • ํ•„์š”ํ•  ๋•Œ๋งŒ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ํ›จ์”ฌ ํšจ์œจ์ .

    • ์„ ํƒ ์ •๋ ฌ์€ ๋ฌด์กฐ๊ฑด ๋ชจ๋“  ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์œ„์น˜๋ฅผ ๋ฐ”๊พผ๋‹ค.

3) ํ€ต ์ •๋ ฌ (Quick Sort)

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ ํ€ต ์ •๋ ฌ๊ณผ ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋น ๋ฅด๊ณ , ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜.

  • ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ€ต ์ •๋ ฌ์€ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ(Pivot)๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ํ€ต ์ •๋ ฌ์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
    • ๋Œ€ํ‘œ์  ๋ฐฉ์‹์€ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ํ•˜๋Š” ํ˜ธ์–ด ๋ถ„ํ• (Hoare partition)

      pivot : ํฐ ์ˆซ์ž์™€ ์ž‘์€ ์ˆซ์ž๋ฅผ ๊ตํ™˜ํ•  ๋•Œ, ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ โ€˜๊ธฐ์ค€โ€™

ํ€ต ์ •๋ ฌ ๊ทธ๋ฆผ ์„ค๋ช…

ํ€ต์ •๋ ฌ

ํ€ต ์ •๋ ฌ ์ง๊ด€์  ์ดํ•ด

ํ€ต์ •๋ ฌ์ง๊ด€์ ์ดํ•ด

ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„

  • ์ด์ƒ์ ์ธ ๊ฒฝ์šฐ ๋ถ„ํ• ์ด ์ ˆ๋ฐ˜์”ฉ ์ผ์–ด๋‚œ๋‹ค๋ฉด ์ „์ฒด ์—ฐ์‚ฐ ํšŸ์ˆ˜๋กœ O(NlogN) ๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋„ˆ๋น„ X ๋†’์ด = ๐‘ ร— ๐‘™๐‘œ๐‘”๐‘ = ๐‘๐‘™๐‘œ๐‘”๐‘
    • ์ตœ์•…์˜ ๊ฒฝ์šฐ O(Nยฒ) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฉ”์šฐ ๋А๋ฆฌ๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. (์‚ฝ์ž…๊ณผ ๋ฐ˜๋Œ€)

ํ€ต ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ ๊ตฌํ˜„

array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]

def quick_sort(array, start, end):
    if start >= end: # ์›์†Œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ ์ข…๋ฃŒ
        return
    pivot = start # ํ”ผ๋ฒ—์€ ์ฒซ ๋ฒˆ์งธ ์›์†Œ
    left = start + 1
    right = end
    while(left <= right):
        # ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต 
        while(left <= end and array[left] <= array[pivot]):
            left += 1
        # ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while(right > start and array[right] >= array[pivot]):
            right -= 1
        if(left > right): # ์—‡๊ฐˆ๋ ธ๋‹ค๋ฉด ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํ”ผ๋ฒ—์„ ๊ต์ฒด
            array[right], array[pivot] = array[pivot], array[right]
        else: # ์—‡๊ฐˆ๋ฆฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ต์ฒด
            array[left], array[right] = array[right], array[left]
    # ๋ถ„ํ•  ์ดํ›„ ์™ผ์ชฝ ๋ถ€๋ถ„๊ณผ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์—์„œ ๊ฐ๊ฐ ์ •๋ ฌ ์ˆ˜ํ–‰
    quick_sort(array, start, right - 1)
    quick_sort(array, right + 1, end)

quick_sort(array, 0, len(array) - 1)
print(array)

์‹คํ–‰ ๊ฒฐ๊ณผ

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ํŒŒ์ด์ฌ์˜ ์žฅ์ ์„ ์‚ด๋ฆฐ ๊ตฌํ˜„

array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]

def quick_sort(array):
	# ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜ ์ดํ•˜์˜ ์›์†Œ๋งŒ์„ ๋‹ด๊ณ  ์žˆ๋‹ค๋ฉด ์ข…๋ฃŒ
    if len(array) <= 1:
    	return array
	
    pivot = array[0] # ํ”ผ๋ฒ—์€ ์ฒซ ๋ฒˆ์งธ ์›์†Œ
    tail = array[1:] # ํ”ผ๋ฒ—์„ ์ œ์™ธํ•œ ๋ฆฌ์ŠคํŠธ
    
    left_side = [x for x in tail if x <= pivot] # ๋ถ„ํ• ๋œ ์™ผ์ชฝ ๋ถ€๋ถ„
    right_side = [x for x in tail if x > pivot] # ๋ถ„ํ• ๋œ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„
    
    # ๋ถ„ํ•  ์ดํ›„ ์™ผ์ชฝ ๋ถ€๋ถ„๊ณผ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์—์„œ ๊ฐ์ž ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜
    return quick_sort(left_side) + [pivot] + quick_sort(right_side)
    
print(quick_sort(array))

ํ€ต ์ •๋ ฌ๊ณผ ๋‹ค๋ฅธ ์ •๋ ฌ ๋น„๊ต

ํ€ต์ •๋ ฌ๊ณผ๋‹ค๋ฅธ์ •๋ ฌ๋น„๊ต


4) ๊ณ„์ˆ˜ ์ •๋ ฌ (Count Sort)

ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์•ž์„œ ๋‹ค๋ค˜๋˜ 3๊ฐ€์ง€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ฒ˜๋Ÿผ ์ง์ ‘ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ๋น„๊ตํ•œ ๋’ค์— ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹(๋น„๊ต ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์ด ์•„๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๐‘, ๋ฐ์ดํ„ฐ(์–‘์ˆ˜) ์ค‘ ์ตœ๋Œ“๊ฐ’์ด ๐พ์ผ ๋•Œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ O(N + K) ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์„ ๋•Œ์— ํ•œํ•ด์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งค์šฐ ๋งŽ๋”๋ผ๋„ ๋น ๋ฅด๊ฒŒ ๋™์ž‘.
  • ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋ณ„๋„์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ทธ ์•ˆ์— ์ •๋ ฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ํŠน์ง•.
  • ์ผ๋ฐ˜์ ์œผ๋กœ max์™€ min์˜ ์ฐจ์ด๊ฐ€ 1,000,000์„ ๋„˜์ง€ ์•Š์„ ๋•Œ, ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ex) [0, 999999] ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ๋Š” ๊ณ„์ˆ˜ ์ •๋ ฌ ์‚ฌ์šฉ x => ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ 100๋งŒ ๊ฐœ๊ฐ€ ๋˜๋„๋ก ์„ ์–ธํ•ด์•ผ ํ•ด์„œ ๋น„ํšจ์œจ์ ์ž„.
  • ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋“ฑ์žฅํ•  ๋•Œ ์ ํ•ฉ
    • ex) ์„ฑ์ ์˜ ๊ฒฝ์šฐ 100์ ์„ ๋งž์€ ํ•™์ƒ์ด ์—ฌ๋Ÿฌ ๋ช…์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ฒฝ์šฐ์—์„  ํšจ์œจ์ ์ž„.

๊ณ„์ˆ˜ ์ •๋ ฌ ๊ทธ๋ฆผ ์„ค๋ช…

๊ณ„์ˆ˜์ •๋ ฌ

๊ณ„์ˆ˜ ์ •๋ ฌ ๊ฒฐ๊ณผ

๊ณ„์ˆ˜์ •๋ ฌ๊ฒฐ๊ณผ

๊ณ„์ˆ˜ ์ •๋ ฌ ์†Œ์Šค์ฝ”๋“œ ๊ตฌํ˜„

# ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •
array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2]
# ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ์„ ์–ธ (๋ชจ๋“  ๊ฐ’์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”)
count = [0] * (max(array) + 1)

for i in range(len(array)):
    count[array[i]] += 1 # ๊ฐ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’ ์ฆ๊ฐ€

for i in range(len(count)): # ๋ฆฌ์ŠคํŠธ์— ๊ธฐ๋ก๋œ ์ •๋ ฌ ์ •๋ณด ํ™•์ธ
    for j in range(count[i]):
        print(i, end=' ') # ๋„์–ด์“ฐ๊ธฐ๋ฅผ ๊ตฌ๋ถ„์œผ๋กœ ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜๋งŒํผ ์ธ๋ฑ์Šค ์ถœ๋ ฅ

์‹คํ–‰ ๊ฒฐ๊ณผ

0 0 1 1 2 2 3 4 5 5 6 7 8 9 9

5) ํŒŒ์ด์ฌ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

sorted()

array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]

result = sorted(array)
print(result)

sort()

array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]

array.sort()
print(array)

key๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ

array = [('๋ฐ”๋‚˜๋‚˜', 2), ('์‚ฌ๊ณผ', 5), ('๋‹น๊ทผ', 3)] # ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํŠœํ”Œ๋กœ ๊ตฌ์„ฑ

def setting(data):
	return data[1] # ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ค์ •

result = sorted(array, key=setting)
print(result) # [('๋ฐ”๋‚˜๋‚˜', 2), ('๋‹น๊ทผ', 3), ('์‚ฌ๊ณผ', 5)]

์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ์ด๋ฏธ ์ž˜ ์ž‘์„ฑ๋œ ํ•จ์ˆ˜์ด๋ฏ€๋กœ ์ง์ ‘ ํ€ต ์ •๋ ฌ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋ณด๋‹ค ํ›จ์”ฌ ํšจ๊ณผ์ 

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(NlogN) ๋ณด์žฅ.
  • ๋ณ‘ํ•ฉ ์ •๋ ฌ๊ณผ ์‚ฝ์ž… ์ •๋ ฌ์˜ ์•„์ด๋””์–ด๋ฅผ ๋”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜.

    ๋‹จ์ˆœํžˆ ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•  ๋•Œ๋Š” ๊ณ„์ˆ˜ ์ •๋ ฌ์„ ์‚ฌ์šฉ

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ

1. ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

  • ๋‹จ์ˆœํžˆ ์ •๋ ฌ ๊ธฐ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ.
    • ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์Œ.

2. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ

  • ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ ๋“ฑ์˜ ์›๋ฆฌ๋ฅผ ์•Œ์•„์•ผ ํ•จ.

3. ๋” ๋น ๋ฅธ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ

  • ํ€ต ์ •๋ ฌ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ํ’€ ์ˆ˜ ์—†๋‹ค. ๊ณ„์ˆ˜ ์ •๋ ฌ ๋“ฑ์˜ ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด์— ์•Œ๋ ค์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ์ ์ธ ๊ฐœ์„ ์„ ๊ฑฐ์ณ์•ผ ํ•จ.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ