CS 곡뢀

버블정렬 선택정렬 μ‚½μž…μ •λ ¬ 퀡정렬

은진 2021. 9. 27. 18:59

κ΅¬ν˜„μ΄ κ°„λ‹¨ν•˜μ§€λ§Œ λΉ„νš¨μœ¨μ μΈ 정렬방법 : μ‚½μž… μ •λ ¬, 선택 μ •λ ¬, 버블 μ •λ ¬

κ΅¬ν˜„μ΄ λ³΅μž‘ν•˜μ§€λ§Œ 효율적인 정렬방법 : 퀡 μ •λ ¬, νž™ μ •λ ¬, 합병 μ •λ ¬, 기수 μ •λ ¬

 

버블정렬

μ„œλ‘œ μΈμ ‘ν•œ 두 μ›μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ μˆœμ„œλŒ€λ‘œ κ΅ν™˜ν•œλ‹€.
1νšŒμ „μ„ μˆ˜ν–‰ν•˜κ³  λ‚˜λ©΄ κ°€μž₯ 큰 μ›μ†Œκ°€ 맨 λ’€λ‘œ μ΄λ™ν•˜λ―€λ‘œ 2νšŒμ „μ—μ„œλŠ” 맨 끝에 μžˆλŠ” μ›μ†ŒλŠ” μ •λ ¬μ—μ„œ μ œμ™Έλœλ‹€.

정렬을 1νšŒμ „ μˆ˜ν–‰ν•  λ•Œλ§ˆλ‹€ μ •λ ¬μ—μ„œ μ œμ™Έλ˜λŠ” μ›μ†Œκ°€ ν•˜λ‚˜μ”© μ¦κ°€ν•œλ‹€.

[버블정렬] 1νšŒμ „
[버블정렬] 2νšŒμ „
[버블정렬] 3νšŒμ „

μ‹œκ°„λ³΅μž‘λ„ O(n^2)

νšŒμ°¨λ§ˆλ‹€ 비ꡐλ₯Ό n-1, n-2, … , 2, 1 λ²ˆν•˜λ―€λ‘œ 총 n(n-1)/2

 

선택정렬

μ΅œμ†Œκ°’μ„ 찾은 ν›„ 첫번째 μ›μ†Œμ™€ κ΅ν™˜ν•œλ‹€.

1νšŒμ „μ„ μˆ˜ν–‰ν•˜κ³  λ‚˜λ©΄ 첫번째 μ›μ†Œλ₯Ό μ œμ™Έν•œ μ΅œμ†Œκ°’μ„ 찾은 ν›„, λ‘λ²ˆμ§Έ μ›μ†Œμ™€ κ΅ν™˜ν•œλ‹€.

정렬을 1νšŒμ „ μˆ˜ν–‰ν•  λ•Œλ§ˆλ‹€ μ •λ ¬μ—μ„œ μ œμ™Έλ˜λŠ” μ›μ†Œκ°€ ν•˜λ‚˜μ”© μ¦κ°€ν•œλ‹€.

 

[선택정렬]

μ‹œκ°„λ³΅μž‘λ„ O(n^2)

μ΅œμ†Ÿκ°’μ„ νƒμƒ‰ν•˜κΈ° μœ„ν•œ 비ꡐλ₯Ό νšŒμ°¨λ§ˆλ‹€ n-1, n-2, … , 2, 1 λ²ˆν•˜λ―€λ‘œ 총 n(n-1)/2

 

μ‚½μž…μ •λ ¬

λ‘λ²ˆμ§Έ μ›μ†Œμ™€ 쒌츑의 μ •λ ¬λœ μ›μ†Œμ™€ λΉ„κ΅ν•˜μ—¬, μˆœμ„œμ— λ§žλŠ” μ˜¬λ°”λ₯Έ μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ›μ†Œλ₯Ό μ‚½μž…ν•œλ‹€.

μ •λ ¬λœ μ›μ†Œλ₯Ό μ—­μˆœμœΌλ‘œ λΉ„κ΅ν•˜λ©°, μ˜¬λ°”λ₯Έ μœ„μΉ˜κ°€ 아닐 경우 ν•œ μΉΈμ”© λ’€λ‘œ μ΄λ™μ‹œν‚¨λ‹€.

 

[μ‚½μž…μ •λ ¬] 전체 흐름
[μ‚½μž…μ •λ ¬] μ›μ†Œμ˜ 이동과 μ‚½μž…

μ‹œκ°„λ³΅μž‘λ„

O(n) : 이미 μ •λ ¬λœ μ΅œμ„ μ˜ 경우, n-1번의 1회차 λΉ„κ΅λ§Œ μˆ˜ν–‰ν•œλ‹€.

O(n^2) : μ—­μˆœμœΌλ‘œ μ •λ ¬λœ μ΅œμ•…μ˜ 경우, 버블정렬와 선택정렬과 λ™μΌν•˜λ‹€.

 

퀡정렬

피벗을 κΈ°μ€€μœΌλ‘œ μ™Όμͺ½μ€ 피벗보닀 μž‘μ€ μ›μ†Œ, 였λ₯Έμͺ½μ€ 피벗보닀 큰 μ›μ†Œκ°€ μœ„μΉ˜ν•œλ‹€.
lowλŠ” 피벗보닀 클 λ•ŒκΉŒμ§€ 우츑으둜 μ΄λ™ν•˜κ³ , highλŠ” 피벗보닀 μž‘μ„ λ•ŒκΉŒμ§€ μ΄λ™ν•œλ‹€.

[퀡정렬] high와 lowκ°€ μ—­μ „ν•˜κΈ° μ „

 

[퀡정렬] high와 lowκ°€ μ—­μ „ν•œ ν›„

 

μ‹œκ°„λ³΅μž‘λ„

O(nlogβ‚‚n) : λΆˆκ· ν˜• λΆ„ν•  없이 계속 μ ˆλ°˜μ”© λΆ„ν• λ˜λŠ” μ΅œμ„ μ˜ 경우 (피벗이 항상 쀑간값일 경우)

• 1μ°¨: 31개의 데이터가 μžˆμ„ λ•Œ 15κ°œμ”© λ‘˜λ‘œ λ‚˜λ‰˜μ–΄ 2 덩어리

• 2μ°¨: 7κ°œμ”© 2덩어리, 총 4덩어리

• 3μ°¨: 3κ°œμ”© 2덩어리, 총 8덩어리

• 4μ°¨:1κ°œμ”© 2덩어리, 총 16덩어리 

λ”°λΌμ„œ λ‘˜λ‘œ λ‚˜λ‰˜λŠ” νšŸμˆ˜λŠ” logβ‚‚n번, ν”Όλ²—κ³Ό μ›μ†Œμ˜ λΉ„κ΅νšŸμˆ˜λŠ” nλ²ˆμ΄λ‹€.

λΆˆκ· ν˜• 뢄할이 μ—†λŠ” μ΅œμ„ μ˜ 경우

O(n^2) : 계속 λΆˆκ· ν˜• λΆ„ν• λ˜λŠ” μ΅œμ•…μ˜ 경우 (피벗이 항상 μ΅œμ†Œκ°’ λ˜λŠ” μ΅œλŒ€κ°’μΌ 경우)

λ‘˜λ‘œ λ‚˜λ‰˜λŠ” νšŸμˆ˜λ„ n번, ν”Όλ²—κ³Ό μ›μ†Œμ˜ λΉ„κ΅νšŸμˆ˜λ„ nλ²ˆμ΄λ‹€.