알고리즘
퀵 정렬 구현하기
개발자 포비
2023. 2. 1. 21:43
퀵 정렬은 O(n logN)의 시간 복잡도를 지닌 좋은 정렬법입니다.
배열의 가장 앞 인덱스를 기준점으로 양 끝점부터 시작하여 서로 만날때까지 반대편 인덱스로 넘어가며 검색하여 위치를 바꾸어줍니다. 양 끝점에서 시작한 점들이 만나는 지점의 인덱스와 기준점으로 잡은 값을 바꿔주어 기준점 왼편과 오른편에 각각 더 작은 수와 큰 수가 오게 됩니다.
이를 기준점 인덱스를 기준으로 양 옆의 배열들을 다시 재귀적으로 함수를 호출하여 정렬을 하게되면, 결과적으로 배열의 모든 값들이 오름차순으로 정렬되어짐을 알 수 있습니다.
아래는 위에서 설명한 퀵 정렬을 C++언어를 이용하여 만든 소스코드입니다. 템플릿 프로그래밍을 이용하여 모든 클래스에 대해 적용할 수 있게끔 일반화 프로그래밍을 하였습니다.
template<class T>
vector<T> QuickSort(vector<T>& list, int front, int back)
{
T middle = list[front];
int i = front;
int j = back + 1;
if (front < back)
{
do {
do {
i++;
} while (middle > list[i]);
do {
j--;
} while (middle < list[j]);
if (i < j)
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
} while (i < j);
int temp = list[j];
list[j] = middle;
list[front] = temp;
QuickSort(list, front, j - 1);
QuickSort(list, j + 1, back);
}
return list;
}
다음 포스팅에서도 자료구조에서 중요한 알고리즘을 가져와서 포스팅해보도록 하겠습니다! 포바~!