퀵소트

Updated:

  • 퀵소트(Quick sort)

    퀵소트(quick sort)는 pivot을 중심으로 작거나 같은 값을 지니는 데이터는 앞으로 반대로 pivot보다 큰 값의 데이터는 뒤로 가도록 정렬한다. 정렬이 완료가 되면 pivot의 왼쪽과 오른쪽을 재귀적으로 반복하며 시간복잡도는 이다.


  • 예시)

    1회전 :

    3 6 1 2 4 -> pivot = 3

    1 2 3 6 4

    2회전(왼) :

    1 2 3 -> pivot = 1

    1 2 3

    2회전(오) :

    6 4 -> pivot = 6

    4 6

    최종 :

    1 2 3 4 6


  • 코드 구현(C++)
#include <iostream>
#include <algorithm>
using namespace std;
int A[5] = { 10,6,1,3,4 };
void print_arr() {
	cout << "\n";
	for (int i = 0; i < 5; i++) cout << A[i] << " ";
	cout << "\n";
}
void quick_sort(int left, int right) {
	if (left == right) return;
	swap(A[left], A[((right - left) / 2 + left)]);
	int l = left + 1;
	int r = right - 1;
	int pivot = left;
	while (l <= r) {
		while (l <= r && A[pivot] >= A[l])
			l++;
		while (l <= r && A[r] >= A[pivot])
			r--;
		if (l <= r)
			swap(A[l], A[r]);
	}
	swap(A[pivot], A[r]);
	quick_sort(left, r);
	quick_sort(r + 1, right);
}

int main(void) {
	print_arr();
	quick_sort(0, 5);
	print_arr();
	return 0;
}