- ์ ๋ ฌ์ด๋ ๋ฐ์ดํฐ๋ฅผ ํน์ ํ ๊ธฐ์ค์ ๋ฐ๋ผ์ ์์๋๋ก ๋์ดํ๋ ๊ฒ์ ๋งํ๋ค.
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ฉด ์ด์ง ํ์(Binary Search)์ด ๊ฐ๋ฅํด์ง๋ค.
- ๋งค๋ฒ '๊ฐ์ฅ ์์ ๊ฒ์ ์ ํ'ํ๋ค๋ ์๋ฏธ์์ ์ ํ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋ค.
- ๊ฐ์ฅ ์์ ๊ฒ์ ์ ํํด์ ์์ผ๋ก ๋ณด๋ด๋ ๊ณผ์ ์ ๋ฐ๋ณตํด์ ์ํํ๋ค ๋ณด๋ฉด, ์ ์ฒด ๋ฐ์ดํฐ์ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋ค.
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] #์ค์ํ - ์ ํ ์ ๋ ฌ์ N-1๋ฒ ๋งํผ ๊ฐ์ฅ ์์ ์๋ฅผ ์ฐพ์์ ๋งจ ์์ผ๋ก ๋ณด๋ด์ผ ํ๋ค. ์๊ฐ๋ณต์ก๋๋ O(N^2)์ด๋ค.
- ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ์์น์ '์ฝ์ 'ํ๋ค๋ ์๋ฏธ์์ ์ฝ์ ์ ๋ ฌ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ํน์ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ ํ ์์น์ ๋ค์ด๊ฐ๊ธฐ ์ด์ ์, ๊ทธ ์๊น์ง์ ๋ฐ์ดํฐ๋ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ ๋ ฌ๋์ด ์๋ ๋ฐ์ดํฐ ๋ฆฌ์คํธ์์ ์ ์ ํ ์์น๋ฅผ ์ฐพ์ ๋ค์, ๊ทธ ์์น์ ์ฝ์
๋๋ค๋ ์ ์ด ํน์ง์ด๋ค.
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], arraj[j-1] = array[j-1], array[j] else: break - ์ฝ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(N^2)์ธ๋ฐ, ์ ํ ์ ๋ ฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋ณต๋ฌธ์ด 2๋ฒ ์ค์ฒฉ๋์ด ์ฌ์ฉ๋์๋ค.
- ์ฝ์ ์ ๋ ฌ์ ํ์ฌ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ํ๋ผ๋ฉด ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋์ํ๋ค.
- ํต ์ ๋ ฌ์ ๊ธฐ์ค์ ์ค์ ํ ๋ค์ ํฐ ์์ ์์ ์๋ฅผ ๊ตํํ ํ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ผ๋ก ๋๋๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- ํต ์ ๋ ฌ์์๋ ํผ๋ฒ์ด ์ฌ์ฉ๋๋ค. ํฐ ์ซ์์ ์์ ์ซ์๋ฅผ ๊ตํํ ๋, ๊ตํํ๊ธฐ ์ํ '๊ธฐ์ค'์ ๋ฐ๋ก ํผ๋ฒ์ด๋ผ๊ณ ํํํ๋ค.
- ํผ๋ฒ์ ์ค์ ํ ๋ค์ ์ผ์ชฝ์์๋ถํฐ ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ , ์ค๋ฅธ์ชฝ์์๋ถํฐ ํผ๋ฒ๋ณด๋ค ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค. ๊ทธ๋ค์ ํฐ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์๋ก ๊ตํํด์ค๋ค.
- ํผ๋ฒ์ ์ผ์ชฝ์๋ ํผ๋ฒ๋ณด๋ค ์์ ๋ฐ์ดํฐ๊ฐ ์์นํ๊ณ , ํผ๋ฒ์ ์ค๋ฅธ์ชฝ์๋ ํผ๋ฒ๋ณด๋ค ํฐ ๋ฐ์ดํฐ๊ฐ ์์นํ๋๋ก ํ๋ ์์ ์ ๋ถํ ํน์ ํํฐ์ ์ด๋ผ๊ณ ํ๋ค.
- ์ผ์ชฝ ๋ฆฌ์คํธ์ ์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ์์๋ ๊ฐ๊ฐ ํผ๋ฒ์ ์ค์ ํ์ฌ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ๋ ฌ์ ์ํํ๋ฉด ์ ์ฒด ๋ฆฌ์คํธ์ ๋ํ์ฌ ๋ชจ๋ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋ค.
- '์ฌ๊ท ํจ์'์ ๋์ ์๋ฆฌ๊ฐ ๊ฐ๋ค. ์ค์ ๋ก ํต ์ ๋ ฌ์ ์ฌ๊ท ํจ์ ํํ๋ก ์์ฑํ์ ๋ ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๊ฒฐํด์ง๋ค.
array=[5,7,9,0,3,1,6,2,4,8] def quick_sort(array, start, ent): 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) - ํ์ด์ฌ์ ์ฅ์ ์ ์ด๋ฆฐ ํต ์ ๋ ฌ ์์ค์ฝ๋
array= [8,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= [s for s in tail if x>pivot] #๋ถํ ๋ ์ค๋ฅธ์ชฝ ๋ถ๋ถ return quick_sort(left_side) + [pivot] + quick_sort(right_side) quick_sort(array) - ํต ์ ๋ ฌ์ ํ๊ท ์๊ฐ ๋ณต์ก๋๋ O(NlogN)์ด๋ค.
- ๊ณ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํน์ ํ ์กฐ๊ฑด์ด ๋ถํฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ง๋ง ๋งค์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- '๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์ ํ๋์ด ์ ์ ํํ๋ก ํํํ ์ ์์ ๋'๋ง ์ฌ์ฉํ ์ ์๋ค.
- ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ๋ฒ์๊ฐ ๋ชจ๋ ๋ด๊ธธ ์ ์๋๋ก ํ๋์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค. ์ฒ์์๋ ๋ฆฌ์คํธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ 0์ด ๋๋๋ก ์ด๊ธฐํํ๋ค. ๊ทธ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ ๋ฐ์ดํฐ์ ๊ฐ๊ณผ ๋์ผํ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด ๊ณ์ ์ ๋ ฌ์ด ์๋ฃ๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฆฌ์คํธ์๋ ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ช ๋ฒ ๋ฑ์ฅํ๋์ง ๊ทธ ํ์๊ฐ ๊ธฐ๋ก๋๋ค.
array = [7,5,9,0,3,1,6,2,9,1,4,8,0,5,2] 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=' ') - ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ธ ์ํฉ์์ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ N, ๋ฐ์ดํฐ ์ค ์ต๋๊ฐ์ ํฌ๊ธฐ๋ฅผ K๋ผ๊ณ ํ ๋, ๊ณ์ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ (O+K)์ด๋ค.
- sorted
array= [7,5,9,0,3,1,6,2,4,8]
result = sorted(array)
- sort
array= [7,5,9,0,3,1,6,2,4,8]
array.sort()
- ์ ๋ ฌ ๊ธฐ์ค(key) ์ค์
array= [('๋ฐ๋๋',2), ('์ฌ๊ณผ',5), ('๋น๊ทผ',3)]
def setting(data):
return data[1]
result = sorted(array, key=setting)