알고리즘/정렬 2020. 4. 7. 17:26

퀵 정렬은 기준값을 정해 그 값으로부터 작은 값은 왼쪽, 큰 값은 오른쪽으로 정렬한 뒤 분할을 반복하는 방식으로 순서는 아래와 같다.

 

1. 기준점을 하나 잡는다.

   ㄴ이때 기준점은 어떤 값이든 상관 없다.

2. 오른쪽 먼저 오른쪽이 왼쪽보다 클 경우에만 반복하며, 해당 배열값이 기준점보다 크면 그 앞에 인덱스값을 비교한다.

3. 기준점보다 작은 값을 찾았을 경우 중지한다.

4. 이번에는 왼쪽을 시작하는데 오른쪽이 왼쪽보다 클 경우에만 반복하며, 기준점보다 작으면 그 뒤에 인덱스값을 비교한다.

5. 기준점보다 큰 값을 찾았을 경우 중지한다.

6. 오른쪽과 왼쪽의 인덱스값을 서로 바꾼다.

7. 이후 왼쪽의 값과 기준점을 바꾼다.

8. 배열의 시작부터 왼쪽 - 1 인덱스까지, 왼쪽 + 1인덱스부터 배열의 끝까지로 나눠 다시 정렬을 반복한다.

9. 최종적으로 배열의 크기가 1일때 정렬이 완료된다.

 

시간복잡도는 (배열의 크기)log(배열의 크기) 이다.

1행 - 기준값을 담을 변수

2, 3행 - 각각 왼쪽, 오른쪽 인덱스값을 담을 변수

 

14행 - 퀵정렬이 이루어지는 부분

17행 - 2~3번 과정

25행 - 4~5번 과정

33행 - 6번 과정

38행 - 7번 과정

42행 - 8번 과정

        ㄴ각각 둘로 쪼개서 다시 퀵정렬을 돌리기 때문에 재귀함수로 호출한다.

'알고리즘 > 정렬' 카테고리의 다른 글

버블 정렬(Bubble Sort)  (0) 2020.04.06
삽입 정렬(Insertion Sort)  (0) 2020.04.02
선택 정렬(Selection Sort)  (0) 2020.04.01
posted by 이오니안
: