C泛型编程实现的快排模版
来源:互联网 发布:个人怎么开淘宝网店 编辑:程序博客网 时间:2024/05/01 13:42
# include <stdio.h># include <stdlib.h># include <string># define X[i] (char *)X+size*(i)int size;void swap (void *a, void *b) { char t[size]; memcpy (t, a, size); memcpy (a, b, size); memcpy (b, t, size); return;}typedef struct pair { int left; int right;};int cpr(void *a, void *b) { pair *A = (pair*)a; pair *B = (pair*)b; return A->right - B->right;}typedef int (*compare)(void *a, void *b);int partition (void *A, int p, int r, compare c) { int q = p; for (int i = p + 1; i <= r; ++ i) { void *x = (char *)A + size * i; //void *x = (char *)A[i]; void *y = (char *)A + size * p; if (c(x, y) < 0){ ++ q; void *z = (char *)A + size * q; swap (x,z); } } void *z = (char *)A + size * q; void *x = (char *)A + size * p; swap(z, x); return q; }void qsort(void *A, int p, int r, compare c) { while (p < r) { int q = partition(A, p, r,c); qsort (A, p, q - 1, c); p = q + 1; }}int main () { size = sizeof(pair); pair A[10]; srand (time(NULL)); for (int i = 0; i < 10; ++ i) { A[i].left = rand() % 90 + 10; A[i].right = rand() % 90 + 10; } A[0].left = 5; A[0].right = 5; qsort (A, 0, 9, cpr); for (int i = 0; i < 10; ++ i) { printf ("%d ", A[i].left); } printf ("\n"); for (int i = 0; i < 10; ++ i) { printf ("%d ", A[i].right); } printf ("\n"); system("pause"); return 0;}