首页 > 代码库 > 使用C++/C qsort 标准库对结构体进行快速排序

使用C++/C qsort 标准库对结构体进行快速排序

C++标准快速排序库qsort进行结构体快速排序

代码如下

 1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef struct 4 { 5     int date; 6     int value; 7 }X_S; 8  9 /* a->z */10 int cmpfunA2Z(const void * a, const void * b)11 {12     X_S * p1 = (X_S *)a;13     X_S * p2 = (X_S *)b;14 15     return p1->value > p2->value;16 }17 18 /* z -> a */19 int cmpfunZ2A(const void * a, const void * b)20 {21     X_S * p1 = (X_S *)a;22     X_S * p2 = (X_S *)b;23 24     return p1->value < p2->value;25 }26 27 int quickSortOfCpp()28 {29     X_S Xlist[100];30     int Ilist[100];31     int i = 0;32     for(i = 0; i < 100; i++)33     {34         Xlist[i].date = i+1;35         double t = (double)i - 50.3;36         Xlist[i].value = http://www.mamicode.com/(int)(t * t + 5.6);37     }38 39     for(i = 0; i < 100; i++)40     {41         printf("num : %3d, value : %4d\n", Xlist[i].date, Xlist[i].value);42     }43 44     qsort(Xlist, 100, sizeof(X_S), cmpfunA2Z);45     printf("\033[034m-------------sorted-------------\033[0m\n");46 47     for(i = 0; i < 100; i++)48     {49         printf("num : %3d, value : %4d\n", Xlist[i].date, Xlist[i].value);50     }51 52     return 0;53 }54 55 int main(int argc, char * argv[])56 {57     quickSortOfCpp();58 59     return 0;60 }

运行结果如下

 1. 排序前结构体数组情况

num :   1, value : 2535num :   2, value : 2436num :   3, value : 2338num :   4, value : 2242num :   5, value : 2149num :   6, value : 2057num :   7, value : 1968num :   8, value : 1880num :   9, value : 1794num :  10, value : 1711num :  11, value : 1629num :  12, value : 1550num :  13, value : 1472num :  14, value : 1396num :  15, value : 1323num :  16, value : 1251num :  17, value : 1182num :  18, value : 1114num :  19, value : 1048num :  20, value :  985num :  21, value :  923num :  22, value :  864num :  23, value :  806num :  24, value :  750num :  25, value :  697num :  26, value :  645num :  27, value :  596num :  28, value :  548num :  29, value :  502num :  30, value :  459num :  31, value :  417num :  32, value :  378num :  33, value :  340num :  34, value :  304num :  35, value :  271num :  36, value :  239num :  37, value :  210num :  38, value :  182num :  39, value :  156num :  40, value :  133num :  41, value :  111num :  42, value :   92num :  43, value :   74num :  44, value :   58num :  45, value :   45num :  46, value :   33num :  47, value :   24num :  48, value :   16num :  49, value :   10num :  50, value :    7num :  51, value :    5num :  52, value :    6num :  53, value :    8num :  54, value :   12num :  55, value :   19num :  56, value :   27num :  57, value :   38num :  58, value :   50num :  59, value :   64num :  60, value :   81num :  61, value :   99num :  62, value :  120num :  63, value :  142num :  64, value :  166num :  65, value :  193num :  66, value :  221num :  67, value :  252num :  68, value :  284num :  69, value :  318num :  70, value :  355num :  71, value :  393num :  72, value :  434num :  73, value :  476num :  74, value :  520num :  75, value :  567num :  76, value :  615num :  77, value :  666num :  78, value :  718num :  79, value :  772num :  80, value :  829num :  81, value :  887num :  82, value :  948num :  83, value : 1010num :  84, value : 1074num :  85, value : 1141num :  86, value : 1209num :  87, value : 1280num :  88, value : 1352num :  89, value : 1426num :  90, value : 1503num :  91, value : 1581num :  92, value : 1662num :  93, value : 1744num :  94, value : 1828num :  95, value : 1915num :  96, value : 2003num :  97, value : 2094num :  98, value : 2186num :  99, value : 2280num : 100, value : 2377

  2. 排序后结构体数组情况

num :  51, value :    5num :  52, value :    6num :  50, value :    7num :  53, value :    8num :  49, value :   10num :  54, value :   12num :  48, value :   16num :  55, value :   19num :  47, value :   24num :  56, value :   27num :  46, value :   33num :  57, value :   38num :  45, value :   45num :  58, value :   50num :  44, value :   58num :  59, value :   64num :  43, value :   74num :  60, value :   81num :  42, value :   92num :  61, value :   99num :  41, value :  111num :  62, value :  120num :  40, value :  133num :  63, value :  142num :  39, value :  156num :  64, value :  166num :  38, value :  182num :  65, value :  193num :  37, value :  210num :  66, value :  221num :  36, value :  239num :  67, value :  252num :  35, value :  271num :  68, value :  284num :  34, value :  304num :  69, value :  318num :  33, value :  340num :  70, value :  355num :  32, value :  378num :  71, value :  393num :  31, value :  417num :  72, value :  434num :  30, value :  459num :  73, value :  476num :  29, value :  502num :  74, value :  520num :  28, value :  548num :  75, value :  567num :  27, value :  596num :  76, value :  615num :  26, value :  645num :  77, value :  666num :  25, value :  697num :  78, value :  718num :  24, value :  750num :  79, value :  772num :  23, value :  806num :  80, value :  829num :  22, value :  864num :  81, value :  887num :  21, value :  923num :  82, value :  948num :  20, value :  985num :  83, value : 1010num :  19, value : 1048num :  84, value : 1074num :  18, value : 1114num :  85, value : 1141num :  17, value : 1182num :  86, value : 1209num :  16, value : 1251num :  87, value : 1280num :  15, value : 1323num :  88, value : 1352num :  14, value : 1396num :  89, value : 1426num :  13, value : 1472num :  90, value : 1503num :  12, value : 1550num :  91, value : 1581num :  11, value : 1629num :  92, value : 1662num :  10, value : 1711num :  93, value : 1744num :   9, value : 1794num :  94, value : 1828num :   8, value : 1880num :  95, value : 1915num :   7, value : 1968num :  96, value : 2003num :   6, value : 2057num :  97, value : 2094num :   5, value : 2149num :  98, value : 2186num :   4, value : 2242num :  99, value : 2280num :   3, value : 2338num : 100, value : 2377num :   2, value : 2436num :   1, value : 2535

 

作者:风波

 

使用C++/C qsort 标准库对结构体进行快速排序