c++sort函數的用法淺析


 

(一)為什么要用c++標准庫里的排序函數

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

(二)c++標准庫里的排序函數的使用方法

I)Sort函數包含在頭文件為#include<algorithm>的c++標准庫中,調用標准庫里的排序方法可以不必知道其內部是如何實現的,只要出現我們想要的結果即可!

II)Sort函數有三個參數:

(1)第一個是要排序的數組的起始地址。

(2)第二個是結束的地址(最后一位要排序的地址)

(3)第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時默認的排序方法是從小到大排序。

Sort函數使用模板:

Sort(start,end,排序方法)

下面就具體使用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;

}    

  

例二

通過上面的例子,會產生疑問:要實現從大到小的排序腫么辦?

 這就如前文所說需要在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;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM