sort 函数和qsort的区别
2016-07-26 14:56
309 查看
sort是qsort的升级版,如果能用sort尽量用sort,使用也比较简单,不像qsort还得自己去写 cmp 函数,只要注明 使用的库函数就可以使用,参数只有两个(如果是普通用法)头指针和尾指针;
默认sort排序后是升序,如果想让他降序排列,可以使用自己编的cmp函数
#include<iostream>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
if(a<b)
return 1; //升序排列,如果改为 a >b,则为降序,要注意sort()中cmp()的返值只有1和0,不像qsort中存在-1!!!!
else
return 0;
}
int main(){
int i;
int a[20];
for(int i=0;i<5;++i)
cin>>a[i];
sort(a,a+5,cmp); //范围,很明显这里是a+5 注意,这是必要的,如果是a+4最后一个值a[4]就不会参与排序。
for(i=0;i<5;i++)
cout<<a[i]<<endl;
system("pause");
return 0;
}
qsort 的使用方法:
一、对int类型数组排序
int num[100];
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b; //升序排序
//return *(int *)b - *(int *)a; //降序排序
/*可见:参数列表是两个空指针,现在他要去指向你的数组元素。所以转型为你当前的类型,然后取值。
升序排列时,若第一个参数指针指向的“值”大于第二个参数指针指向的“值”,则返回正;若第一个参数指针指向的“值”等于第二个参数指针指向的“值”,则返回零;若第一个参数指针指向的“值”小于第二个参数指针指向的“值”,则返回负。
降序排列时,则刚好相反。
}
qsort(s,n,sizeof(s[0]),cmp);
二、对double类型数组排序(特别要注意)
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
//返回值的问题,显然cmp返回的是一个整型,所以避免double返回小数而被丢失,用一个判断返回值。
}
qsort(in,100,sizeof(in[0]),cmp);
//附:排序结果的输出,一般建议用 “ %g ” 格式
"%g"格式输出 虽然书上是说系统会自动选择 " %f " 格式 和 " %e " 格式 中长度较短的格式,并去掉无意义的0,但实际上系统如果选择了" %e ",系统会输出比 “ %e " 格式更省一位的格式输出
默认sort排序后是升序,如果想让他降序排列,可以使用自己编的cmp函数
#include<iostream>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
if(a<b)
return 1; //升序排列,如果改为 a >b,则为降序,要注意sort()中cmp()的返值只有1和0,不像qsort中存在-1!!!!
else
return 0;
}
int main(){
int i;
int a[20];
for(int i=0;i<5;++i)
cin>>a[i];
sort(a,a+5,cmp); //范围,很明显这里是a+5 注意,这是必要的,如果是a+4最后一个值a[4]就不会参与排序。
for(i=0;i<5;i++)
cout<<a[i]<<endl;
system("pause");
return 0;
}
qsort 的使用方法:
一、对int类型数组排序
int num[100];
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b; //升序排序
//return *(int *)b - *(int *)a; //降序排序
/*可见:参数列表是两个空指针,现在他要去指向你的数组元素。所以转型为你当前的类型,然后取值。
升序排列时,若第一个参数指针指向的“值”大于第二个参数指针指向的“值”,则返回正;若第一个参数指针指向的“值”等于第二个参数指针指向的“值”,则返回零;若第一个参数指针指向的“值”小于第二个参数指针指向的“值”,则返回负。
降序排列时,则刚好相反。
}
qsort(s,n,sizeof(s[0]),cmp);
二、对double类型数组排序(特别要注意)
double in[100];
int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
//返回值的问题,显然cmp返回的是一个整型,所以避免double返回小数而被丢失,用一个判断返回值。
}
qsort(in,100,sizeof(in[0]),cmp);
//附:排序结果的输出,一般建议用 “ %g ” 格式
"%g"格式输出 虽然书上是说系统会自动选择 " %f " 格式 和 " %e " 格式 中长度较短的格式,并去掉无意义的0,但实际上系统如果选择了" %e ",系统会输出比 “ %e " 格式更省一位的格式输出
相关文章推荐
- Android中 Intent 与 Intent-filter
- Windows 下配置 Nginx PHP
- spss
- Android 反编译
- Maven入门
- HDU5573 Binary Tree(构造)
- 做性能测试之前需要确定的某些
- 深入理解JavaScript MVC 框架
- leetcode题集——trapping-rain-water
- 数据库学习遇到的问题
- PyGobject(十三)布局容器之Button篇——图片按钮和圆形按钮
- php运行shell
- Jenkins工具(一)之 Jenkins环境搭建
- 支付宝集成
- 数据的压缩存储与解压缩算法实现(C语言)
- 数据的压缩存储与解压缩算法实现(C语言)
- 由函数符号找不到联想到的动态链接过程
- 数据的压缩存储与解压缩算法实现(C语言)
- TestLink
- Oracle中SQL语句学习五(统计分组语句group by和having)