Sort()函數是c++一種排序方法之一,它使用的排序方法是類似于快排的方法,時間復雜度為n*log2(n)
(1)Sort函數包含在頭文件為#include<algorithm>的c++標準庫中。
II)Sort函數有三個參數:
(1)第一個是要排序的數組的起始地址。
(2)第二個是結束的地址(最后一位要排序的地址)
(3)第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時默認的排序方法是從小到大排序。
Sort函數使用模板: Sort(start,end,,排序方法)
例一: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;
}
這就是告訴程序要實現從大到小的排序的方法!
#include<iostream>
#include<algorithm>
using namespace std;
bool complare(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,complare);//在這里就不需要對complare函數傳入參數了,//這是規則
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
例三:
通過上面例一、二的方法雖然實現了從大到小和從大到小的排序,這樣做還是有點麻煩,因為還需要自己編寫告訴程序進行何種排序的函數,c++標準庫強大的功能完全可以解決這種麻煩。
Sortt函數的第三個參數可以用這樣的語句告訴程序你所采用的排序原則
less<數據類型>()//從小到大排序
greater<數據類型>()//從大到小排序
結合本例子,這樣的就可以完成你想要的任何一種排序原則了
#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,less<int>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
?
#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,greater<int>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
?
例四:利用sort函數還可以實現對字符的排序,排序方法大同小異,下面就把程序范例展示一下
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
char a[11]="asdfghjklk";
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,greater<char>());
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}