이미안녕 2019. 10. 24. 11:07
#include <stdio.h>

void swap(int data[], int a, int b) {
	int temp = 0;
	temp = data[a];
	data[a] = data[b];
	data[b] = temp;
}

int partition(int data[], int left, int right) {
	int pivot = data[left];
	int low = left +1;
	int high = right;

	while (low <= high)
	{
		while (low <= right && pivot >= data[low])
			low++;
		while (high >= (left+1) && pivot <= data[high])
			high--;

		if (low <= high) {
			swap(data, low, high);
		}
	}

	swap(data, left, high);
	return high;
}

void quick_sort(int data[], int left, int right) {
	int pivot = 0;
	if (left >= right) {
		return;
	}

	pivot = partition(data, left, right);
	quick_sort(data, left, pivot -1);
	quick_sort(data, pivot +1, right);
}

int main(void) {
	
	int data[10] = {0,2,4,6,8,1,3,5,7,9};
	int n = 10;
	int i = 0;

	quick_sort(data, 0, n-1);

	for (i = 0; i < n; i++) {
		printf("%d ", data[i]);
	}
	printf("\n");

	return 0;
}