【排序函数讲解】sort-C++

c++标准库里的排序函数,用于对给定区间所有元素进行排序。头
文件是#include
使用 Sort()在具体实现中规避了经典快速排序可能出现的、会导
致实际复杂度退化到 o(n²)的极端情况。它根据具体情况使用不
同排序方法,效率极高。
sort 函数基本格式:
sort(首元素地址,尾元素地址的下一个地址,比较函数);
说明:排序方法可以是从大到小也可是从小到大,还可以不写第三
个参数,此时默认的排序方法是从小到大排序。
举例:下面就具体使用 sort()函数结合对数组里的十个数进行排
序做一个说明。
例一:sort 函数没有第三个参数,实现的是从小到大

#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;
}

例二:从大到小排序
需要加入一个比较函数 cmp()

bool cmp(int a,int b)
{
	return a>b;
}

程序如下:

   #include<iostream>
    #include<algorithm>
    using namespace std;
    bool cmp(int a,int b)
    {
   	 return a>b;
    }
    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,cmp);//在这里就不需要对 cmp 函数传入参数了,这是规则
    
  	 for(int i=0;i<10;i++)
        	cout<<a[i]<<endl;
        return 0;
        }

例三:对结构体数据排序
假设自己定义了一个结构体 node

struct node
{
	int a;
	int b;
	double c;
}

有一个 node 类型的数组 node arr[100],想对它进行排序:先按 a
值升序排列,如果 a 值相同,再按 b 值降序排列,如果 b 还相同,
就按 c 降序排列。就可以写这样一个比较函数:
以下是代码片段:

bool cmp(node x,node y)
{
	if(x.a!=y.a) return x.a<y.a;
	if(x.b!=y.b) return x.b>y.b;
    return x.c>y.c;
}

例四:对字符串的排序
如:

string str[5]={“bbb”,”abc”,”cc”,”b”,”aaaa”};
sort(str,str+5);
for (int i=0;i<5;i++)
 cout<<str[i]<<endl;
//依次输出 aaaa,abc,b,bbb,cc

但是,如果是想按字符串的长度对 str 进行递增排序,则先定义
cmp 函数再调用。

bool cmp(string str1,string str2)
{
    return str1.length()<str2.length();
}

调用:sort(str,str+5,cmp);
输出:

for(int i=0;i<5;i++)
	cout<<str[i]<<endl;

//依次输出 b,cc,bbb,abc,aaaa

另外,在部分题目中会看到以下字样:对*****,按输入的顺序输出。
由于sort在排序过程中不是很稳定,如果有诸如此类的要求,请把sort替换成stable_sort,即稳定排序。(如果考试禁用请无视)

posted @ 2019-06-02 07:17  摸鱼酱  阅读(463)  评论(0编辑  收藏  举报