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;}

原创粉丝点击