快排

242 阅读1分钟

problem link:www.luogu.org/problemnew/…

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn = 100000;
int a[maxn + 10];

void quick_sort(int a[], int left, int right) {
	if(left >= right) return;
	int L = left, R = right;
	int pivot = a[(L + R) >> 1];
	
	while(L <= R) {
		while(L <= R && a[L] < pivot) L++;
		while(R >= L && a[R] > pivot) R--;
		if(L <= R) {
			if(a[L] != a[R]) swap(a[L], a[R]);
			L++;
			R--;
		}
	}
	if(left < R) quick_sort(a, left, R);
	if(L < right) quick_sort(a, L, right);
}

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

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