sort函數的用法(C++排序庫函數的調用)

對數組進行排序,在c++中有庫函數幫咱們實現,這們就不須要咱們本身來編程進行排序了。node

(一)爲何要用c++標準庫裏的排序函數ios

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

(二)c++標準庫裏的排序函數的使用方法編程

I)Sort函數包含在頭文件爲#include<algorithm>的c++標準庫中,調用標準庫裏的排序方法能夠沒必要知道其內部是如何實現的,只要出現咱們想要的結果便可!數組

II)Sort函數有三個參數:函數

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

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

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

Sort函數使用模板:blog

Sort(start,end,排序方法)

下面就具體使用sort()函數結合對數組裏的十個數進行排序作一個說明!

例一:sort函數沒有第三個參數,實現的是從小到大

 1 #include<iostream>
 2 
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7    int a[10]={9,6,3,8,5,2,7,4,1,0};
 8    for(int i=0;i<10;i++)
 9    cout<<a[i]<<endl;
10   sort(a,a+10);
11    for(int i=0;i<10;i++)
12    cout<<a[i]<<endl;
13    return 0;
14 }

 

例二

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

 這就如前文所說須要在sort()函數裏的第三個參數裏作文章了,告訴程序我要從大到小排序!

須要加入一個比較函數 complare(),此函數的實現過程是這樣的

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

  這就是告訴程序要實現從大到小的排序的方法!

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 bool complare(int a,int b)
 5 {
 6      return a>b;
 7 }
 8 int main()
 9 {
10      int a[10]={9,6,3,8,5,2,7,4,1,0};
11      for(int i=0;i<10;i++)
12      cout<<a[i]<<endl;
13      sort(a,a+10,complare);//在這裏就不須要對complare函數傳入參數了,
14 //這是規則
15      for(int i=0;i<10;i++)
16         cout<<a[i]<<endl;
17      return 0;
18 }

 假設本身定義了一個結構體node

1 struct node
2 {
3   int a;
4   int b;
5   double c;
6 }

有一個node類型的數組node arr[100],想對它進行排序:先按a值升序排列,若是a值相同,再按b值降序排列,若是b還相同,就按c降序排列。就能夠寫這樣一個比較函數:

如下是代碼片斷:

1 bool cmp(node x,node y)
2 {
3    if(x.a!=y.a) return x.a<y.a;
4    if(x.b!=y.b) return x.b>y.b;
5    return x.c>y.c;
6 }
相關文章
相關標籤/搜索