Loading... ## qsort函数简介 <div class="tip inlineBlock success"> 排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort函数(全称quicksort)。它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n) </div> ### 功能: 使用快速排序例程进行排序 ### 头文件: stdlib.h ### 用法: void qsort(void* base,size_t num,size_t width,int(__cdecl* compare)(const void*,const void*)); ### 参数: <div class="tip inlineBlock warning"> 1 待排序数组,排序之后的结果仍放在这个数组中 2 数组中待排序元素数量 3 各元素的占用空间大小(单位为字节) 4 指向函数的指针,用于确定排序的顺序(需要用户自定义一个比较函数) </div> qsort要求提供一个自己定义的比较函数。比较函数使得qsort通用性更好,有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。 如比较函数 int cmp(const void *a, const void *b) 中有两个元素作为参数(参数的格式不能变),返回一个int值,比较函数cmp的作用就是给qsort指明元素的大小是怎么比较的。 ## qsort中几种常见的排序 ### 一、对int型数组排序 ```cpp #include<stdio.h> #include<stdlib.h> int cmp(const void *a, const void *b) { int *aa = (int*)a; int *bb = (int*)b; return *aa - *bb; } int main() { int array[] = {1, 10, 8 , 4, 5}; qsort(array,5,sizeof(array[0]),cmp); for(int i =0; i < 5; i++) { printf("%d ", array[i]); } return 0; } ``` <div class="tip inlineBlock warning"> 可见,参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从小到大),如果想降序排列返回*b-*a即可。 </div> ### 二、对char型数组排序(同int类型) ```c++; char word[100] int cmp_char(const void* _a , const void* _b) //参数格式固定 { char* a = (char*)_a; //强制类型转换 char* b = (char*)_b; return *a - *b; } qsort(word,100,sizeof(word[0]),cmp_char); ``` ### 三、对double型数组排序 ```c++ double in[100]; int cmp_double(const void* _a , const void* _b) //参数格式固定 { double* a = (double*)_a; //强制类型转换 double* b = (double*)_b; return *a > *b ? 1 : -1; //特别注意 } qsort(in,100,sizeof(in[0]),cmp_double); ``` <div class="tip inlineBlock warning"> 在对浮点或者double型的一定要用三目运算符,因为要是使用像整型那样相减的话,如果是两个很接近的数则可能返回一个很小的小数(大于-1,小于1),而cmp的返回值是int型,因此会将这个小数返回0,系统认为是相等,失去了本来存在的大小关系 </div> ### 四、对字符串进行排序 ```cpp char word[100][10]; int cmp_string(const void* _a , const void* _b) //参数格式固定 { char* a = (char*)_a; //强制类型转换 char* b = (char*)_b; return strcmp(a,b); } qsort(word,100,sizeof(word[0]),cmp_string); ``` 原文链接:https://blog.csdn.net/zhao888789/article/details/79186619 最后修改:2021 年 08 月 29 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果文章有用,请随意打赏。
1 条评论
c++ 里面的 sort 有妙用,可以去看看,可以按照你的要求排序。比如结构体的某个元素等等