만족
[알고리즘] 퀵 정렬 (Quick Sort) 본문
[알고리즘] 퀵 정렬 (Quick Sort)
기타 CS 이론/Algorithm Satisfaction 2018. 1. 15. 01:42퀵 정렬
Merge Sort와 비슷하게 Divide and Conquer기법을 사용하고 Recursive Function을 이용한다.
매 재귀마다, Quick Sort는 Pivot이라는 정렬의 기준이 될 기준을 선정한다.
효율적인 Pivot을 선정하는 방법은 다음에 설명하기로 하고, 우선 Pivot을 현재 배열의 마지막 데이터로 하기로 하자.
그 Pivot을 기준으로 Pivot보다 작은 데이터들은 Pivot의 왼쪽으로, 큰 데이터들은 Pivot의 오른쪽으로 옮긴다.
그러면, Pivot은 제 위치를 찾게 되고(정렬이 끝난 뒤의 위치에 존재한다)
정렬되지 않은 배열은 Pivot의 왼쪽과 오른쪽이다. (2개의 정렬되지 않은 부분배열로 나누어진다.)
이제 정렬되지 않은 부분배열에 대해서 Quick Sort를 반복한다.
이 과정을 부분 배열의 갯수가 1개 이하가 될 때까지 반복하면 정렬이 완료된다.
Java Code
public static void quickSort(int[] array, int start, int end){
if(end- start<= 0 || end>=array.length || start<0){
return;
}
int pivot= end;
int index= start;
for(int j= start; j<=end; j++){
if(j== pivot){
continue;
}
if(array[j] <= array[pivot]){
int temp= array[j];
array[j]= array[index];
array[index]= temp;
index++;
}
}
int temp= array[pivot];
array[pivot]= array[index];
array[index]= temp;
quickSort(array, start, index-1);
quickSort(array, index+1, end);
}
시간복잡도
Quick Sort는 평균적으로 Time Complexity가 O(n*log n) 이다.
그러나 Worst Case(Pivot을 잘못 선정했을 때)일 때 O(n^2)이 된다.
따라서 Pivot을 잘 선정하는 것이 Quick Sort의 성능을 좌우한다고 할 수 있다.
'기타 CS 이론 > Algorithm' 카테고리의 다른 글
[알고리즘] 점근적 표기법 (0) | 2018.11.13 |
---|---|
[알고리즘] 이분 탐색(Binaray Search) (3) | 2018.01.16 |
[알고리즘] 병합 정렬(Merge Sort) (0) | 2018.01.14 |
[알고리즘] 삽입 정렬(Insertion Sort) (0) | 2018.01.13 |
[알고리즘] 선택정렬 (Selection Sort) (0) | 2018.01.13 |
Comments