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

作者:风波

时间: 2024-10-09 14:14:56

使用C++/C qsort 标准库对结构体进行快速排序的相关文章

qsort 与sort 对结构体排序实例

qsort 与sort 对结构体排序实例 #include<bits/stdc++.h> using namespace std; typedef struct { string book; int num; }Book; //qsort的比较函数 int cmp(const void * a, const void * b) { return (*(Book*)a).num > (*(Book*)b).num ? 1 : 0; } //sort的比较函数 bool cmp_(Book

C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合

#include<iostream> #include<string> #define ml 10 using namespace std; typedef struct{//定义Data数据项 std::string name; long num; }Data; struct Link{//定义结构体 Data data[ml+1]; int length; }L; void initLink(Link *p){//初始化,即便有数据可以覆盖写入增加效率 p->length

结构体字节对齐

结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题.从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐. 内存对齐的原因: 1)某些平台只能在特定的地址处访问特定类型的数据: 2)提高存取数据的速度.比如有的平台每次都是从偶地址处读取数据,对于一个int型的

【Swift】学习笔记(八)——类和结构体

1.类和结构体的定义 <pre name="code" class="html">struct Resolution { var width = 0 var height = 0 } class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? //值为可选String类型的name } 类:keyw

Swift中类和结构体

1. 类和结构体对比 Swift 中类和结构体有很多共同点: 定义属性用于存储值 定义方法用于提供功能 定义附属脚本用于访问值 定义构造器用于生成初始化值 通过扩展以增加默认实现的功能 符合协议以对某类提供标准功能 与结构体相比,类还有如下的附加功能: 继承允许一个类继承另一个类的特征 类型转换允许在运行时检查和解释一个类实例的类型 解构器允许一个类实例释放任何其所被分配的资源 引用计数允许对一个类的多次引用 2. 类和结构体的定义语法 类和结构体有着类似的定义方式.我们通过关键字class和s

Swift类与结构体

类和结构体有很多共性: 定义属性存储数据 定义方法执行功能处理 定义下标,通过下标访问他们的值 初始化他们的状态 通过扩展(Extension)扩展其功能 遵守协议(Protocol),协议提供一种特定的标准 功能 类比结构体多出的功能: 能够继承另外一个类 能够核对运行期对象的类型 析构对象释放资源 引用计数允许一个类实例有多个引用 类和结构体的定义 定义类和结构体: [html] view plaincopy class SomeClass { // class definition goe

swift 类 与 结构体

这两天突然有人问我  swift里面 类和 结构体  有什么区别? 说实在的本人目前不太看好swift,相信很多人也是,oc 都 很成熟了. 本人目前不打算深入了解swift的原因swift  语言 虽然也已经出来很久了,但是总感觉还有许多东西 不如oc稳定.  每个 版本的 swift  都会有比较大的变动. 所以干脆先等等,等到工作不忙 swift也稳定了,然后再看也不迟. 但是 有些里面已经稳定了的东西可以先作为了解内容.  今天就说下类  和  结构体. http://c.bianche

Swift语法学习之 类和结构体

类和结构体 本页包含内容: 类和结构体对比 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复制行为 与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意: 通常一个类的实例被称为对象.然而在Swift 中,类和结构体的关系要比在其他语言中更加的密切,本章中所讨论的大部分功能都可以用在类和结构体上.因此,我们会主要使

Swift的闭包,枚举,类和结构体

闭包(Closures) 使用过其它语言的应该对代码块并不陌生,Swift中的闭包与C,OC中的Block相似. 表示自包括的函数代码块.能够在代码中传递和使用. 而且能够捕获和存储上下文的变量以及常量值,Swift会为你进行捕获相关的内存操作. 上一篇文章提到的函数.也是一种特殊的闭包.详细在: 全局函数是有名字可是不会捕获不论什么值的闭包. 嵌套函数是有名字且能够捕获域内值的闭包. 闭包表达式是利用轻量级语法写的能够捕获上下文值的匿名闭包. 基本的语法 表达式的一般语法以及简化过程 上面罗列