μ λ ¬ μκ³ λ¦¬μ¦μ λνμ¬
μ λ ¬ μκ³ λ¦¬μ¦μ λνμ¬
μ λ ¬
- λ°μ΄ν°λ₯Ό νΉμ ν κΈ°μ€μ λ°λΌμ μμλλ‘ λμ΄νλ κ².
λ¬Έμ λ₯Ό νκ±°λ, 무μΈκ°λ₯Ό ꡬνν λ κ°μ₯ μ€μν κ²μ "μνμκ°"μ΄λ€. μ΄ μνμκ°μ μν©μ λ§λ μκ³ λ¦¬μ¦μ μ¬μ©ν¨μΌλ‘μ¨ μ€μ΄λ λ€. μ΄μ μμ΄ "μ λ ¬"μ μμ£Ό μ€μν μμκ° λλ€.
μ΄ κΈμμλ λνμ μΈ μ λ ¬ 3κ°μ§. μ ν μ λ ¬, μ½μ μ λ ¬, ν΅ μ λ ¬λ§μ μμλ³Ό κ²μ΄λ€.
μ ν μ λ ¬
-κ°μ₯ μμ λ°μ΄ν°λ₯Ό μ νν΄ λ§¨ μμ μλ λ°μ΄ν°μ λ°κΎΈκ³ , κ·Έ λ€μ μμ λ°μ΄ν°λ₯Ό μ νν΄ λλ²μ§Έ λ°μ΄ν°μ λ°κΎΈλ μκ³ λ¦¬μ¦
λ°λ‘ μμλ‘ λμ΄κ°λ³΄μ.
a = [3, 7, 0, 6] λΌλ 리μ€νΈκ° μλ€κ³ κ°μ νμ.
1. 0μ μ νν΄μ 3κ³Ό λ°κΎΌλ€ -> [0, 7, 3 ,6]
2. 3μ μ νν΄μ 7κ³Ό λ°κΎΌλ€ -> [0, 3, 7, 6]
3. 7μ μ νν΄μ 6κ³Ό λ°κΎΌλ€ -> [0, 3, 6, 7]
μ΄μκ°μ΄ nκ°μ μκ° μμ λ n + n-1 + n-2---- +2κ° λκ³ , μ΄λ μκ° λ³΅μ‘λ O(N^2)λ‘ λ³Ό μ μλ€.
λ°μ΄ν°κ° 100κ°λΌλ©΄ μν μκ°μ 10,000λ°° λμ΄λλ κ²μ΄λ€. μ λ ¬ μκ³ λ¦¬μ¦ μ€μμ ꡬννκΈ°λ μ½μ§λ§, μλΉν λΉν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ΄λΌκ³ λ³Ό μ μλ€.
μ ν μ λ ¬ μμ€μ½λ
array = [0,5,2,7,4]
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)
μ½μ μ λ ¬
-νΉμ ν λ°μ΄ν°λ₯Ό μ μ ν μμΉμ 'μ½μ 'νλ μκ³ λ¦¬μ¦
-μ ν μ λ ¬μ λΉν΄ ꡬνμ μ΄λ ΅μ§λ§, μ€ν μκ° μΈ‘λ©΄μμ λμ± ν¨μ¨μ μ΄λ€
-μ λ ¬μ΄ λμ΄μμ λ μκ° λ³΅μ‘λκ° O(N)μ΄λ€.
-μ½μ μ λ ¬μμ 첫λ²μ§Έλ μ λ ¬λμ΄ μλ€κ³ νλ¨νκΈ° λλ¬Έμ λλ²μ§ΈλΆν° μμ.
μμ
a = [7 5 9 3]
1. 5λ 7λ³΄λ€ μκΈ°μ λμ swapνλ€.-->[5 7 9 3]
2. 9λ 7λ³΄λ€ ν¬κ²μ κ°λ§ν λλ€.
3. 3μ 9λΆν° μκΈ°μ swap νλ€--> [5 7 3 9] --> μ΄λ₯Ό ν λ² λ μννλ€ -->[5 3 7 9] --> ν λ² λ μν -->[3 5 7 9]
jλ₯Ό νμνλ μλΌκ³ λμμ λ, j-1λ³΄λ€ μλ€λ©΄ swapμ μ§ννκ³ ν¬λ€λ©΄ breakλ₯Ό λ£μ΄μ£Όλ©΄ λλ€.
μ½μ μ λ ¬ μμ€μ½λ
array = [1,4,2,5,3,8]
for i in range(1,len(array)):
for j in range(i, 0, -1):
if array[j] < array[j-1] :
array[j], array[j-1] = array[j-1], array[j]
else :
break
print(array)
ν΅ μ λ ¬
-κΈ°μ€ λ°μ΄ν°λ₯Ό μ€μ νκ³ κ·Έ κΈ°μ€λ³΄λ€ ν° λ°μ΄ν°μ μμ λ°μ΄ν°μ μμΉλ₯Ό λ°κΎΈλ μκ³ λ¦¬μ¦
μ΄ κΈμμλ λνμ μΈ λΆν λ°©μμΌλ‘ ν΅ μ λ ¬μ μκ°ν κ²μ΄λ€. λ°©λ²μ μ²μ²ν μ΄ν΄λ³΄μ
1. νΌλ²(리μ€νΈμ 첫λ²μ§Έ μ«μ)λ₯Ό μ€μ νλ€.
2. μΌμͺ½μμλΆν° νΌλ²λ³΄λ€ ν° λ°μ΄ν°λ₯Ό μ°Ύκ³ , μ€λ₯Έμͺ½μμλΆν° νΌλ²λ³΄λ€ μμ λ°μ΄ν°λ₯Ό μ°Ύλλ€. μ΄λ₯Ό swapν΄μ€λ€.
3. μΌμͺ½μμ μ°Ύλ κ°μ΄ μ€λ₯Έμͺ½μμ μ°Ύλκ°κ³Ό μκ°λ Έμ λ μ€λ₯Έμͺ½μ μλ κ°μ νΌλ²κ³Ό λ°κΏμ€λ€λ©΄ νΌλ²μ κΈ°μ€μΌλ‘ μΌμͺ½μ νΌλ²λ³΄λ€ μμ κ°λ€, μ€λ₯Έμͺ½μ νΌλ²λ³΄λ€ ν° κ°λ€λ‘ μ λ ¬μ΄ λλ€.
ν΅ μ λ ¬ μμ€μ½λ
array = [3,4,1,5,2,3,5,7]
def quick_sort(array, start, end):
if start >=end:
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[pivot], array[right] = array[right], array[pivot]
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)
νμ΄μ¬μμλ§ κ°λ₯ν ν΅ μ λ ¬ λν μ‘΄μ¬νλ€. μ΄λ κΈ°μ‘΄μ ν΅ μ λ ¬λ³΄λ€λ μ°μ° νμκ° λ§μ§λ§ μ§κ΄μ μ΄κ³ ꡬνκ°κΈ°κ° μ½λ€.
νμ΄μ¬ μ μ© μμ€μ½λ
array = [2,3,1,4,9]
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_sort)
print(quick_sort(array))
ν΅ μ λ ¬μ μκ° λ³΅μ‘λλ Nκ°μ λ°μ΄ν°κ° μ‘΄μ¬νλ€λ©΄, Nλ²λμ μμ λ°μ΄ν°μ ν° λ°μ΄ν°λ₯Ό λ°κΎΈκ³ μ΄λ₯Ό λΆν logNλ² νλ€λ κ²μ μ μ μλ€. κ·Έλ κΈ°μ ν΅ μ λ ¬μ N X logNμ μκ°λ³΅μ‘λλ₯Ό λ°λ₯Έλ€. μ΄λ₯Ό μ§κ΄μ μΌλ‘ μ΄ν΄νλ κ²μ λμ΄λ‘ μ μ μλλ°, Nκ°κ° κ°λ‘, logNμ΄ μΈλ‘λΌκ³ λ΄€μ λ λκ°κ° κ³±ν κ²λ§νΌ μ°μ°νμκ° μκΈ΄λ€. μ΄λ μ νμ λ ¬κ³Ό μ½μ μ λ ¬μ λΉν΄ κ·Ήλͺ ν μλμ°¨μ΄κ° μμμ μ μ μλ€. ν΅ μ λ ¬μ νκ· μ μΌλ‘ O(NlogN)μ λ°λ₯΄μ§λ§ λ°μ΄ν°κ° μ λ ¬λμ΄ μλ κ²½μ° λ§€μ° λλ¦¬κ² λμν μ μλ€. λ°κΎΈμ§ μμλ λλ μλ₯Ό λ°κΎΈκΈ° λλ¬Έμ΄λ€. μ΄λ μ νμ λ ¬κ³Ό κ°μ΄ O(N^2)μΈ κ²½μ°μ΄λ€.