https://www.luogu.org/problem/show?pid=1177
P1177 【模板】快速排序
语言判断错误。应该是C但是判断成C艹。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void kp(int *begin, int *end) { /* 快排 */
int len = end-begin;
int fj; /* 分界 */
double fjpos = 0;
int i;
int *l, *h;
if (begin >= end) return;
/* 生成分界点 */
#define SJCS (0x0814 %100) /* 随机次数 */
for (i = 0; i < SJCS; ++i)
fjpos += rand() * 1.0 / RAND_MAX;
fj = begin[(size_t)(fjpos / SJCS * len)];
/* 分离 */
l = begin;
h = end-1;
for (; l < h; ++l, --h) {
while (*l <= fj && l != h) ++l;
while (*h > fj && l != h) --h;
if (l == h) break;
*l ^= *h;
*h ^= *l;
*l ^= *h;
}
kp(begin, l);
kp(l+1, end);
}
int main(void) {
int i;
int n;
int *a;
int *k;
#ifdef LOCAL
freopen("3.txt", "r", stdin);
#endif
srand(time(NULL));
scanf("%d", &n);
a = malloc(sizeof(int) * n);
k = a-1;
for (i = 0; i < n; ++i)
scanf("%d", ++k);
kp(a, a+n);
k = a;
for (i = 0; i < n; ++i)
printf("%d ", *k++);
return 0;
}