본문 바로가기
전공공부/알고리즘 공부

(정렬) 퀵정렬

by 시아나 2022. 3. 23.

pseudo code

QuickSort(A, left, right)
입력: 배열 A[left]~A[right]
출력: 정렬된 배열 A[left]~A[right]
if(left < right){
	피봇을 A[left]~A[right] 중에서 선택하고, 피봇을 A[left]와 자리를 바꾼 후, 피봇과 배열의 각 
    원소를 비교하여 피봇보다 작은 숫자들은 A[left]~A[p-1]로 옮기고, 피봇보다 큰 숫자들은 
    A[p+1]~A[right]로 옮기며, 피봇은 A[p]에 놓는다.
    QuickSort(A, left,p-1);
    QuickSort(A,p+1,right);
}

 

c 코드

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void swap(int* n1, int* n2) {
	int tmp = *n1;
	*n1 = *n2;
	*n2 = tmp;
}

void QuickSort(int* A, int left, int right) {
	if (left < right) {
		int p, l = left; int r = right;
		int pivot = A[(left+right)/2];
		while (l < r) {
			while (A[l] < pivot) { l+=1; }
			while (A[r] > pivot) { r-=1;}
			if (A[l] == A[r]) {
				r--; l++;
			}
			if (l >= r) {
				break;
			}
			swap(&A[r], &A[l]);

		}
		for (p = left; p < right && A[p] != pivot; p++);
		QuickSort(A, left, p - 1);
		QuickSort(A, p + 1, right);
	}
}

실행 시간 

8개 : 0.000

10,000개 : 0.003

100,000개 : 0.162

600,000개 : 5.186

1,000,000개 : 14.549

'전공공부 > 알고리즘 공부' 카테고리의 다른 글

(정렬) 정리  (0) 2022.03.25
(정렬) 버블정렬  (0) 2022.03.24
(정렬) 삽입 정렬  (0) 2022.03.24
(정렬) 합병정렬 코드  (0) 2022.03.22
(정렬) 선택정렬 코드  (0) 2022.03.22