快速排序(算法导论版)

#include 
#include 

const int N = 1e5 + 10;

int n;
int a[N];

void swap(int *p, int *q)
{
	int tmp;
	tmp = *p;
	*p = *q;
	*q = tmp;
}

int partition(int a[], int p, int r)
{
	int x = a[r], i = p - 1;
	for (int j = p; j <= r - 1; ++ j)
		if (a[j] <= x) ++ i, swap(&a[i], &a[j]);
	
	swap(&a[i + 1], &a[r]);
	return i + 1;
}

void quick_sort(int a[], int p, int r)
{
	if (p < r)
	{
		int q = partition(a, p, r);
		quick_sort(a, p, q - 1);
		quick_sort(a, q + 1, r); 
	}
	return ;
}

int main()
{
	scanf("%d", &n);
	for (int i = 0; i < n; ++ i) scanf("%d", &a[i]);
	
	quick_sort(a, 0, n - 1);
	
	for (int i = 0; i < n; ++ i) printf("%d ", a[i]);
	
	return 0;
} 

你可能感兴趣的:(排序,算法,数据结构,c++)