record logo record

퀵 정렬(Quick Sort) 이란?

퀵 정렬(Quick Sort) 알고리즘의 특징

퀵 정렬(Quick Sort)의 알고리즘 예시

Source Code

#include <stdio.h>

int num = 10;

int data[10] = {1,10,5,8,7,6,4,3,2,9};

// start : 부분집합의 첫번째 원소
// end : 부분집합의 마지막 원소
void quickSort(int *data, int start, int end){
	if(start >= end ){ // 원소가 한개인 경우 
		return;
	}
	int key = start; // 첫 번째 원소(pivot) 
	int i = start + 1; // 원소 출발지점 왼쪽 -> 오른쪽  
	int j = end; // 원소 출발지점 오른쪽 -> 왼쪽
	int tmp;
	while(i <= j) { // pivot 값 기준으로 찾은 큰 값과 작은 값이 엇갈린 경우까지 반복 
		while(data[i] >= data[key]) { // pivot 값 보다 큰 값을 만날때까지  
			i++;
		}
		while(data[j] <= data[key] && j > start) {// pivot 값 보다 작은 값을 만날 때까지 && pivot 값 보다 크지 않아야한다. 
			j--;
		}
		if( i > j){ // 엇갈린 경우에 키 값과 교체한다. 
			tmp = data[j];
			data[j] = data[key];
			data[key] = tmp;
		}else { // 엇갈리지 않았다면 큰 값과 작은 값을 교체한다. 
			tmp = data[j];
			data[j] = data[i];
			data[i] = tmp;
		}
	}
	quickSort(data, start, j-1);
	quickSort(data, j+1, end);
}
   
int main(){
	 quickSort( data, 0, num - 1 );
	 
	 for(int i = 0; i < num; i++){
	 	printf("%d ",data[i]);
	 }
	
	return 0;
}

퀵 정렬(Quick Sort)의 시간복잡도

  • 퀵 정렬의 시간복잡도는 O(N*logN) 이다.
    • 최악의 경우에는 O(N^2) 이다.

정렬 알고리즘 시간복잡도 비교

관련된 Post

References