1. 程式人生 > >sort()函式

sort()函式

 

用於C++中,對給定區間所有元素進行排序。標頭檔案是

#include <algorithm>
using namespace std

sort函式見下表:

函式名 功能描述
sort 對給定區間所有元素進行排序
stable_sort 對給定區間所有元素進行穩定排序
partial_sort 對給定區間所有元素部分排序
partial_sort_copy 對給定區間複製並排序
nth_element 找出給定區間的某個位置對應的元素
is_sorted 判斷一個區間是否已經排好序
partition 使得符合某個條件的元素放在前面
stable_partition

相對穩定的使得符合某個條件的元素放在前面

sort函式的用法(C++排序庫函式的呼叫)

對陣列進行排序,在c++中有庫函式幫我們實現,這們就不需要我們自己來程式設計進行排序了。

(一)為什麼要用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+11);

        for(int i=0;i<10;i++)

            cout<<a[i]<<endl;

    return 0;

}

例二

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

這就如前文所說需要在sort()函式裡的第三個引數裡做文章了,告訴程式我要從大到小排序!

需要加入一個比較函式compare(),此函式的實現過程是這樣的

bool compare(int a,int b)

{

    return a>b;

}

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

#include<iostream>


#include<algorithm>

using namespace std;

bool compare(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,compare);//在這裡就不需要對compare函式傳入引數了,

    //這是規則

    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;

}

 

cmp函式進行二級排序:

 

bool comp( time a,time b)
{
    if(a.t<b.t)
        return true;
    else if(a.t>b.t)
        return false;
    else
        if(a.cost<b.cost)
            return true; 
    return false;
}


此時結構體先是根據t進行升序排序 ,後按照cost進行升序排序