sort()排序函數

sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因爲它使用的排序方法是類似於快排的方法,時間複雜度爲n*log2(n),執行效率較高!

sort函數包含在頭文件爲algorithm的c++標準庫中,調用標準庫裏的排序方法可以不必知道其內部是如何實現的,只要出現我們想要的結果即可!

sort函數有三個參數:
(1)第一個是要排序的數組的起始地址。
(2)第二個是結束的地址(最後一位要排序的地址)
(3)第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時默認的排序方法是從小到大排序。

例一: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;
}

通過上面的例子,會產生疑問:要實現從大到小的排序腫麼辦?
這就如前文所說需要在sort()函數裏的第三個參數裏做文章了,告訴程序我要從大到小排序!
需要加入一個比較函數 complare(),此函數的實現過程是這樣的

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

sort的強大在於還可以對結構體使用排序

#include<iostream>
#include<algorithm>
using namespace std;
struct Str
{
	int num;
	string ss;
	
}str[105];
bool cmp(Str A,Str B)
{
	if(A.num==B.num)
		return A.ss<B.ss;
	return A.num<B.num;
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>str[i].ss>>str[i].num;
	}
	sort(str,str+n,cmp);
	for(int i=0;i<n;i++)
	{
		cout<<str[i].ss<<" "<<str[i].num<<endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章