본문 바로가기
컴퓨터공학/알고리즘 ˙ 자료구조

[알고리즘] 퀵 정렬과 병합 정렬

by 독서왕뼝아리 2023. 4. 26.

 

퀵 정렬

배열에서 기준값(Pivot)을 설정해 작은 값은 왼쪽에, 큰 값은 오른쪽에 배치한다. 재귀적으로 분할해 정렬을 수행한다.

 

  1. pivot, left 인덱스와 right 인덱스를 설정한다.
  2. left값이 피봇보다 작으면 오른쪽으로 이동하고 크면 stop, right값도 똑같이 피봇보다 크면 왼쪽으로 이동하고 작으면 stop한다.
  3. 둘 다 stop인 경우 두 값을 swap한다.
  4. left 인덱스와 right 인덱스가 만날 때까지 수행하고, 그 인덱스를 기준으로 파티션을 분할해 정렬을 수행한다.

 

평균 시간복잡도는 O(nlogn)이지만 최악의 경우(오름차순 되어 있는데 내림차순으로 변경할 때) O(n^2)이다.

 

 

 

병합 정렬

https://i.namu.wiki/i/4JKVP3wRyMYaDKU_CBtFlxlJletKNFeFR4_OsvOOpkI3Jmq4LEWGiX2vyPYNWu2s0Lr_4kT05udJ8rzurJp4Cw.mp4

병합 정렬의 기본 원리는 정렬되어 있는 두 배열의 첫 번째 값을 비교해 하나의 배열로 병합하는 원리이다. 

 

 

 

따라서 우리가 정렬하고 싶은 무작위 배열을 둘로 나눴을 때 정렬되어 있음을 보장할 수 없으므로 원소의 개수가 1이 될 때까지 분할한다. 그런 다음 하나의 배열로 merge한다. 

 

시간 복잡도는 O(nlogn)을 보장한다. (배열 값을 N번 비교, logN번 분할) 하지만 병합하는 배열을 따로 저장하기 때문에 공간을 사용할 수 없는 경우 퀵 소트를 사용한다.

 

 

 

 

ref

이 분 짱짱

퀵정렬

https://www.youtube.com/watch?v=7BDzle2n47c&t=452s&ab_channel=%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD

 

병합정렬

https://www.youtube.com/watch?v=QAyl79dCO_k&t=29s&ab_channel=%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD