使用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 = (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 : 2535

num :   2, value : 2436

num :   3, value : 2338

num :   4, value : 2242

num :   5, value : 2149

num :   6, value : 2057

num :   7, value : 1968

num :   8, value : 1880

num :   9, value : 1794

num :  10, value : 1711

num :  11, value : 1629

num :  12, value : 1550

num :  13, value : 1472

num :  14, value : 1396

num :  15, value : 1323

num :  16, value : 1251

num :  17, value : 1182

num :  18, value : 1114

num :  19, value : 1048

num :  20, value :  985

num :  21, value :  923

num :  22, value :  864

num :  23, value :  806

num :  24, value :  750

num :  25, value :  697

num :  26, value :  645

num :  27, value :  596

num :  28, value :  548

num :  29, value :  502

num :  30, value :  459

num :  31, value :  417

num :  32, value :  378

num :  33, value :  340

num :  34, value :  304

num :  35, value :  271

num :  36, value :  239

num :  37, value :  210

num :  38, value :  182

num :  39, value :  156

num :  40, value :  133

num :  41, value :  111

num :  42, value :   92

num :  43, value :   74

num :  44, value :   58

num :  45, value :   45

num :  46, value :   33

num :  47, value :   24

num :  48, value :   16

num :  49, value :   10

num :  50, value :    7

num :  51, value :    5

num :  52, value :    6

num :  53, value :    8

num :  54, value :   12

num :  55, value :   19

num :  56, value :   27

num :  57, value :   38

num :  58, value :   50

num :  59, value :   64

num :  60, value :   81

num :  61, value :   99

num :  62, value :  120

num :  63, value :  142

num :  64, value :  166

num :  65, value :  193

num :  66, value :  221

num :  67, value :  252

num :  68, value :  284

num :  69, value :  318

num :  70, value :  355

num :  71, value :  393

num :  72, value :  434

num :  73, value :  476

num :  74, value :  520

num :  75, value :  567

num :  76, value :  615

num :  77, value :  666

num :  78, value :  718

num :  79, value :  772

num :  80, value :  829

num :  81, value :  887

num :  82, value :  948

num :  83, value : 1010

num :  84, value : 1074

num :  85, value : 1141

num :  86, value : 1209

num :  87, value : 1280

num :  88, value : 1352

num :  89, value : 1426

num :  90, value : 1503

num :  91, value : 1581

num :  92, value : 1662

num :  93, value : 1744

num :  94, value : 1828

num :  95, value : 1915

num :  96, value : 2003

num :  97, value : 2094

num :  98, value : 2186

num :  99, value : 2280

num : 100, value : 2377

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

num :  51, value :    5

num :  52, value :    6

num :  50, value :    7

num :  53, value :    8

num :  49, value :   10

num :  54, value :   12

num :  48, value :   16

num :  55, value :   19

num :  47, value :   24

num :  56, value :   27

num :  46, value :   33

num :  57, value :   38

num :  45, value :   45

num :  58, value :   50

num :  44, value :   58

num :  59, value :   64

num :  43, value :   74

num :  60, value :   81

num :  42, value :   92

num :  61, value :   99

num :  41, value :  111

num :  62, value :  120

num :  40, value :  133

num :  63, value :  142

num :  39, value :  156

num :  64, value :  166

num :  38, value :  182

num :  65, value :  193

num :  37, value :  210

num :  66, value :  221

num :  36, value :  239

num :  67, value :  252

num :  35, value :  271

num :  68, value :  284

num :  34, value :  304

num :  69, value :  318

num :  33, value :  340

num :  70, value :  355

num :  32, value :  378

num :  71, value :  393

num :  31, value :  417

num :  72, value :  434

num :  30, value :  459

num :  73, value :  476

num :  29, value :  502

num :  74, value :  520

num :  28, value :  548

num :  75, value :  567

num :  27, value :  596

num :  76, value :  615

num :  26, value :  645

num :  77, value :  666

num :  25, value :  697

num :  78, value :  718

num :  24, value :  750

num :  79, value :  772

num :  23, value :  806

num :  80, value :  829

num :  22, value :  864

num :  81, value :  887

num :  21, value :  923

num :  82, value :  948

num :  20, value :  985

num :  83, value : 1010

num :  19, value : 1048

num :  84, value : 1074

num :  18, value : 1114

num :  85, value : 1141

num :  17, value : 1182

num :  86, value : 1209

num :  16, value : 1251

num :  87, value : 1280

num :  15, value : 1323

num :  88, value : 1352

num :  14, value : 1396

num :  89, value : 1426

num :  13, value : 1472

num :  90, value : 1503

num :  12, value : 1550

num :  91, value : 1581

num :  11, value : 1629

num :  92, value : 1662

num :  10, value : 1711

num :  93, value : 1744

num :   9, value : 1794

num :  94, value : 1828

num :   8, value : 1880

num :  95, value : 1915

num :   7, value : 1968

num :  96, value : 2003

num :   6, value : 2057

num :  97, value : 2094

num :   5, value : 2149

num :  98, value : 2186

num :   4, value : 2242

num :  99, value : 2280

num :   3, value : 2338

num : 100, value : 2377

num :   2, value : 2436

num :   1, value : 2535

 

作者:风波

 

你可能感兴趣的:(sort)