본문 바로가기
개인공부/Algorithm(C, C++)

QuickSort(퀵정렬), C, C++

by 저세상판단 2020. 1. 14.
반응형

Pivot을 기준으로 Pivot보다 작은 수는 왼쪽에, Pivot보다 큰 수는 오른쪽에 배치하여 정렬하는 기법이다.

이름처럼 매우 빠른 속도로 정렬한다.

 

 


#include 
#include 
#define max 10

void QuickSort(int*, int, int);
int Partition(int*, int, int);

void QuickSort(int* a, int start, int end){
	int index;
	if(start < end){
		index = Partition(a, start, end);
		QuickSort(a, start, index-1);
		QuickSort(a, index+1, end);
	}
	else{
		return ;
	}
	
}

int Partition(int* a, int start, int end){
	//
	int pivot = a[end];
	int i;
	int index = start;
	int temp;
	
	for(i = start; i < end; i++){
		if(a[i] <= pivot){
			temp = a[i];
			a[i] = a[index];
			a[index] = temp;
			index++;
		}
	}
	temp = a[end];
	a[end] = a[index];
	a[index] = temp;
	return index;
}


int main()
{
	int a[max] = {40, 30, 100, 60, 80, 70, 90,10, 20, 50};
	printf("before sort : ");
	for(int i = 0; i < max; i++){
		printf("%d ", a[i]);
	}
	printf("\n");
	
	//index is 0~9, so last data is (max-1)
	QuickSort(a, 0, max-1);
	
	printf("after sort : ");
	for(int i = 0; i < max; i++){
		printf("%d ", a[i]);
	}
}

반응형