您的位置:首页 > 编程语言 > C语言/C++

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

2014-11-21 10:17 369 查看
C++标准快速排序库qsort进行结构体快速排序

代码如下

#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int date;
int value;
}X_S;

/* a->z */
int cmpfunA2Z(const void * a, const void * b)
{
X_S * p1 = (X_S *)a;
X_S * p2 = (X_S *)b;

return p1->value > p2->value;
}

/* z -> a */
int cmpfunZ2A(const void * a, const void * b)
{
X_S * p1 = (X_S *)a;
X_S * p2 = (X_S *)b;

return p1->value < p2->value;
}

int quickSortOfCpp()
{
X_S Xlist[100];
int Ilist[100];
int i = 0;
for(i = 0; i < 100; i++)
{
Xlist[i].date = i+1;
double t = (double)i - 50.3;
Xlist[i].value = (int)(t * t + 5.6);
}

for(i = 0; i < 100; i++)
{
printf("num : %3d, value : %4d\n", Xlist[i].date, Xlist[i].value);
}

qsort(Xlist, 100, sizeof(X_S), cmpfunA2Z);
printf("\033[034m-------------sorted-------------\033[0m\n");

for(i = 0; i < 100; i++)
{
printf("num : %3d, value : %4d\n", Xlist[i].date, Xlist[i].value);
}

return 0;
}

int main(int argc, char * argv[])
{
quickSortOfCpp();

return 0;
}


运行结果如下

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


作者:风波
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: