使用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

 

作者:风波

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值