当前位置:嗨网首页>书籍在线阅读

01-sort函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

附录B sort函数

我们可以利用C++中的排序函数sort,对古董的重量进行从小到大排序。要使用此函数,只需引入头文件:

#include <algorithm>

语法描述为:

sort(begin, end)// 参数begin, end表示一个范围,分别为待排序数组的首地址和尾地址。

例如:

//mysort1
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
 int a[10]={7,4,5,23,2,73,41,52,28,60},i;
 for(i=0;i<10;i++)
   cout<<a[i]<<" ";
 cout<<endl;
 sort(a,a+10);
 for(i=0;i<10;i++)
  cout<<a[i]<<" ";
 return 0;
}

输出结果为:

7 4 5 23 2 73 41 52 28 60
2 4 5 7 23 28 41 52 60 73

sort(a,a+10)将把数组a按升序排序,因为sort函数默认为升序。可能有人会问:怎么样用它降序排列呢?这就是下一个讨论的内容。

(1)自己编写compare函数

一种是自己编写一个比较函数来实现,接着调用含3个参数的sort:

sort(begin,end,compare) //两个分别为待排序数组的首地址和尾地址。
//最后一个参数compare表示比较的类型

例如:

//mysort2
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{
       return a<b;   //升序排列,如果改为return a>b,则为降序
}
int main()
{
     int a[10]={7,4,5,23,2,73,41,52,28,60},i;
     for(i=0;i<10;i++)
       cout<<a[i]<<" ";
     cout<<endl;
     sort(a,a+10,compare);
     for(i=0;i<10;i++)
       cout<<a[i]<<" ";
     return 0;
}

输出结果为:

7 4 5 23 2 73 41 52 28 60
2 4 5 7 23 28 41 52 60 73

(2)利用functional标准库

其实对于这么简单的任务(类型支持“<”“>”等比较运算符),完全没必要自己写一个类出来。标准库里已经有现成可用的,就在functional里,在头文件引用include进来即可。

#include<functional>

functional提供了如下的基于模板的比较函数对象。

  • equal_to:等于。
  • not_equal_to:不等于。
  • greater:大于。
  • greater_equal:大于等于。
  • less:小于。
  • less_equal:小于等于。

对于这个问题来说,greater和less就足够了,可以直接拿来用。

  • 升序:sort(begin,end,less())。
  • 降序:sort(begin,end,greater())。
//mysort3
#include<cstdio>
#include<iostream>
#include<functional>
#include<algorithm>
using namespace std;
int main()
{
     int a[10]={7,4,5,23,2,73,41,52,28,60},i;
     for(i=0;i<10;i++)
       cout<<a[i]<<" ";
     cout<<endl;
     sort(a,a+10,greater<int>());//从大到小排序
     for(i=0;i<10;i++)
       cout<<a[i]<<" ";
     return 0;
}

输出结果为:

7 4 5 23 2 73 41 52 28 60
73 60 52 41 28 23 7 5 4 2