직대딩 블로그

퀵 정렬 본문

알고리즘/알고리즘 기법 정리

퀵 정렬

Jae Yeon 2023. 3. 12. 18:25
#include<stdio.h>
int count, m;
void swap(int *x, int *y) {
	int temp = *x;
	*x = *y;
	*y = temp;
}

void qs(int a[], int left, int right) {
	int i, j, k, pivot;
	if (left < right) {
		i = left - 1; j = right;
		pivot = a[right];
		do {
			do { i++; } while (a[i] < pivot);
			do { j--; } while (j > left && a[j] > pivot);
			if (i < j) swap(&a[i], &a[j]);
			printf("step %d :", m++);
			for (int k = 0; k < count; k++) printf("%d\t", a[k]);
			printf("\n");
		} while (i < j);
		swap(&a[right], &a[i]);
		qs(a, left, i - 1);
		qs(a, i + 1, right);
	}
}

void main() {
	int array[] = { 5,2,8,1,9,7 };
	count = sizeof(array) / sizeof(int);
	printf("정렬 전 데이터 : ");
	for (int i = 0; i < count; i++)
		printf("%d \t", array[i]);
	printf("\n");

	qs(array, 0, count - 1);

	printf(" 정렬 후 데이터 :");
	for (int i = 0; i < count; i++)
		printf("%d \t", array[i]);
	printf("\n");
}

'알고리즘 > 알고리즘 기법 정리' 카테고리의 다른 글

기수 정렬  (0) 2023.03.12
힙 정렬  (0) 2023.03.12
(알고리즘) 자주 사용하는 함수들  (0) 2023.03.12
Suffix Array와 Index Tree  (1) 2023.03.12
그래프 (Graph)와 DFS/BFS  (0) 2023.03.12
Comments