sort

函数名 功能描述
sort 对给定区间所有元素进行排序
stable_sort 对给定区间所有元素进行稳定排序
partial_sort 对给定区间所有元素部分排序
partial_sort_copy 对给定区间复制并排序
nth_element 找出给定区间的某个位置对应的元素
is_sorted 判断一个区间是否已经排好序
partition 使得符合某个条件的元素放在前面
stable_partition 相对稳定的使得符合某个条件的元素放在前面

函数名 功能描述
sort 对给定区间所有元素进行排序
stable_sort 对给定区间所有元素进行稳定排序
partial_sort 对给定区间所有元素部分排序
partial_sort_copy 对给定区间复制并排序
nth_element 找出给定区间的某个位置对应的元素
is_sorted 判断一个区间是否已经排好序
partition 使得符合某个条件的元素放在前面
stable_partition 相对稳定的使得符合某个条件的元素放在前面

要使用此函数只需用#include <algorithm> sort即可使用,语法描述为:

sort(begin,end),表示一个范围,例如:int _tmain(int argc, _TCHAR* argv[])
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}

输出结果将是把数组a按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.

一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare).

1)自己编写compare函数:

bool compare(int a,int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序}int _tmain(int argc, _TCHAR* argv[])
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20,compare);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}

2)更进一步,让这种操作更加能适应变化。也就是说,能给比较函数一个参数,用来指示是按升序还是按降序排,这回轮到函数对象出场了。

为了描述方便,我先定义一个枚举类型EnumComp用来表示升序和降序。很简单:

enum Enumcomp{ASC,DESC};然后开始用一个类来描述这个函数对象。它会根据它的参数来决定是采用“<”还是“>”。class compare
{
private:
Enumcomp comp;
public:
compare(Enumcomp c):comp(c) {};
bool operator () (int num1,int num2)
{
switch(comp)
{
case ASC:
return num1<num2;
case DESC:
return num1>num2;
}
}
};接下来使用 sort(begin,end,compare(ASC)实现升序,sort(begin,end,compare(DESC)实现降序。主函数为:int main()
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20,compare(DESC));
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}

3)其实对于这么简单的任务(类型支持“<”、“>”等比较运算符),完全没必要自己写一个类出来。标准库里已经有现成的了,就在functional里,include进来就行了。functional提供了一堆基于模板的比较函数对象。它们是(看名字就知道意思了):equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。对于这个问题来说,greater和less就足够了,直接拿过来用:

升序:sort(begin,end,less<data-type>());
降序:sort(begin,end,greater<data-type>()).
int _tmain(int argc, _TCHAR* argv[])
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
sort(a,a+20,greater<int>());
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}

4)既然有迭代器,如果是string 就可以使用反向迭代器来完成逆序排列,程序如下:

int main()
{
string str("cvicses");
string s(str.rbegin(),str.rend());
cout << s <<endl;
return 0;
}

qsort():

原型:
_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*));

解释: qsort ( 数组名 ,元素个数,元素占用的空间(sizeof),比较函数)
比较函数是一个自己写的函数 遵循 int com(const void *a,const void *b) 的格式。
当a b关系为 > < = 时,分别返回正值 负值 零 (或者相反)。
使用a b 时要强制转换类型,从void * 转换回应有的类型后,进行操作。
数组下标从零开始,个数为N, 下标0-(n-1)。

实例:
int compare(const void *a,const void *b)
{
return *(int*)b-*(int*)a;
}int main()
{
int a[20]={2,4,1,23,5,76,0,43,24,65},i;
for(i=0;i<20;i++)
cout<<a[i]<<endl;
qsort((void *)a,20,sizeof(int),compare);
for(i=0;i<20;i++)
cout<<a[i]<<endl;
return 0;
}

相关:

1)why你必须给予元素个数?

因为阵列不知道它自己有多少个元素

2)why你必须给予大小?

因为 qsort 不知道它要排序的单位.

3)why你必须写那个丑陋的、用来比较俩数值的函式?

因为 qsort 需要一个指标指向某个函式,因为它不知道它所要排序的元素型别.

4)why qsort 所使用的比较函式接受的是 const void* 引数而不是 char* 引数?

因为 qsort 可以对非字串的数值排序.


.str()

std::ostringstream 的对象用起来和 cout 差不多,
都可以使用<<运算符,将数字和字符串“流出”。
不同的是,cout 是将内容流出到 控制台窗口(stdout),
而 std::ostringstream 的对象,是将内容流入到内部的字符串(std::string)内。
可以使用成员函数str()获取流入的内容。

#include <string></string>
#include <sstream></sstream>
#include <iostream></iostream>
int main() {
int a = 10;
int b = 20;
std::ostringstream oss;oss << "### " << a << " + " << b << " = " << a + b << " ###";std::string text = oss.str();std::cout << text.c_str() << std::endl;return 0;
}

C++ 排序函数 sort(),qsort()的用法 附加.str()用法相关推荐

  1. C++ 排序函数 sort(),qsort()的用法

    想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描述 sort 对给定区 ...

  2. R语言数据排序函数sort, order rank实战

    R语言数据排序函数sort, order & rank实战 目录 R语言数据排序函数sort, order & rank实战 #sort vs. order vs. rank函数基础 ...

  3. c++自带的排序函数sort

    其实C语言里也有qsort排序函数,但相较于C++的sort排序函数更加繁琐,不推荐使用.下面来介绍怎么使用C++里的sort排序函数. Sort的用法 1.sort函数的使用必须加上头文件#incl ...

  4. 排序函数 sort()、sorted()、argsort()函数

    sort()函数 python的内建排序函数有 sort.sorted两个.而sort ()可以直接对列表进行排序 用法:list.sort(func=None, key=None, reverse= ...

  5. python 排序函数 sort sorted 简介

    sort() 是Python列表的一个内置的排序方法,list.sort() 方法排序时直接修改原列表,返回None: sort() 是Python内置的一个排序函数,它会从一个迭代器返回一个排好序的 ...

  6. 指针:调用自定义排序函数sort,对输入的n个数进行从小到大输出。

    Description 自定义函数sort(int *p, int n),功能是对n个数排序.在main函数中,调用它,对输入的任意个数排序. Input 多组测试数据,先输入n(n<100), ...

  7. 排序函数(sort()、sorted()、argsort()函数)

    python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 1 ls = list([5, 2, 3, 1, 4]) 2 new_ls = so ...

  8. python 数组排序sort_Python之排序函数sort() 和 sorted()

    sort() 是Python列表的一个内置的排序方法,list.sort() 方法排序时直接修改原列表,返回None: sort() 是Python内置的一个排序函数,它会从一个迭代器返回一个排好序的 ...

  9. php中asort 排序语句,php中的几个经典排序函数(sort,asort,ksort等)

    1 2 3 4 5 6 7 8sort() 函数用于对数组单元从低到高进行排序. rsort() 函数用于对数组单元从高到低进行排序. asort() 函数用于对数组单元从低到高进行排序并保持索引关系 ...

最新文章

  1. 初学python下载哪个版本-学python下载哪个版本
  2. 【转】 ASP.NET 3.5中使用新的ListView控件
  3. python打卡记录去重_python中对list去重的多种方法
  4. 投影元素直接隔离_摸着夜色上露台开投影,是巴塞罗那设计师的浪漫
  5. 信息学竞赛计算机基础知识,信息学奥赛-计算机基础知识.doc
  6. Ubuntu18.04上安装RTX 2080Ti显卡驱动
  7. 网络软文发布软件_星浪中合网软文写出爆款汽车营销软文的特点是什么?
  8. 安装freetds小记
  9. 谷歌放弃go_用 Go 实现 Flutter
  10. matlab 系统 h10,Thinkbook、ThinkPad出厂带H10混合固态的机器重装系统启用傲腾的方法...
  11. MQTT代理服务器的选择
  12. ACM篇:Uva -- 253 Cude Painting
  13. select下拉框如何显示提示语,不要出现下拉选项中
  14. 【通过】华为OD机试真题59:叠积木
  15. 多关键词匹配个人解决方案
  16. hc05刷hid固件_Arduino使用HC05蓝牙模块与手机连接
  17. Q50 数组中重复的数字
  18. 当别人加快脚步的时候,你更应该慢下来
  19. 【机房收费个人版】DataTable 与泛型集合的较量
  20. 7款功能超牛的电脑软件,分分钟提高效率!

热门文章

  1. 题目1203:IP地址
  2. 题目1201:二叉排序树
  3. 14. Java基础之泛型
  4. 云如何让App开发更简单?
  5. 13 vue学习 package.json
  6. 解决delphi10.2.3 android tools闪退
  7. Tomcat9+eclipse如何发布网站
  8. 中山大学2016年硕士研究生入学考试复试基本分数线
  9. tomcat服务器上https的SSL证书安装配置
  10. matlab paticalcoff,关于DOA估计中加权前后向空间平滑算法的仿真问题