C和C++里的qsort&sort快排函数
2022/2/25 12:51:19
本文主要是介绍C和C++里的qsort&sort快排函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C和C++里的qsort&sort快排函数
- qsort在C语言的stdlib.h头文件里面
- 设想:单个字符或ASCII直接比较或许也可以。
- sort在C++语言的algorithm头文件里面
- less<数据类型>() //从小到大排序
- greater<数据类型>() //从大到小排序
qsort在C语言的stdlib.h头文件里面
int num[100]; //写函数: int cmp_int(const void* _a, const void* _b) //参数格式固定 { int *a = *(int*)_a; //强制类型转换 int *b = *(int*)_b; return *a - *b; } //(这个cmp函数得自己写) //注意cmp函数的返回值必须是int型 //调用: qsort(num,100,sizeof(num[0]),cmp_int); //数组名、长度、数组元素长度、排序方法
注:
参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从小到大),如果想降序排列返回 *b-*a 即可。
例如:
#include<stdio.h> #include<stdlib.h> int cmp_int(const void* a, const void* b) { return *(int*)a - *(int*)b; } //从大到小排序 int main() { int n=0; //个数 int arr[40]={0}; scanf("%d",&n); int i=0; for(i=0;i<n;i++) scanf("%d",&arr[i]); //qsort--C语言函数 qsort(arr,n,4,cmp_int); return 0; }
补充:
1.对double型数组排序
int cmp_double(const void* _a , const void* _b) //参数格式固定 { double* a = (double*)_a; //强制类型转换 double* b = (double*)_b; return *a > *b ? 1 : -1; //特别注意 } qsort(arr,100,sizeof(arr[0]),cmp_double);
注:
在对浮点或者double型的一定要用三目运算符,因为函数返回值是int,直接相减可能精度缺失返回 0,表示相等,失去原本来存在的大小关系。
2.对字符串进行排序
int cmp_string(const void* _a , const void* _b) //参数格式固定 { char* a = (char*)_a; //强制类型转换 char* b = (char*)_b; return strcmp(a,b); //比较大小 } qsort(str,100,sizeof(str[0]),cmp_string);
设想:单个字符或ASCII直接比较或许也可以。
sort在C++语言的algorithm头文件里面
一、sort(a,a+10),没有第三个参数,实现的是从小到大
#include<iostream> #include<algorithm> using namespace std; int main() { int a[10]= {9,6,3,8,5,2,7,4,1,0}; for(int i=0; i<10; i++) cout<<a[i]<<endl; sort(a,a+10); for(int i=0; i<10; i++) cout<<a[i]<<endl; return 0; }
二、sort(a,a+10,complare),自定义排序方式
bool complare(int a,int b) { return a>b; } sort(a,a+10,complare);
三、sort函数第三个参数可以选择排序原则
less<数据类型>() //从小到大排序
greater<数据类型>() //从大到小排序
例如:
sort(a,a+10,less<int>()); sort(a,a+10,greater<int>()); sort(a,a+10,less<char>()); sort(a,a+10,greater<char>());
–over–
这篇关于C和C++里的qsort&sort快排函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享