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
作者:风波