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;
}
2016/12/12 19:38
33065