sort()函式詳解

2021-10-14 03:45:27 字數 1721 閱讀 2125

1、形式:sort(first_pointer,first_pointer+n,cmp)

引數解釋:

第乙個引數是陣列的首位址,一般寫上陣列名就可以,因為陣列名是乙個指標常量。

第二個引數相對較好理解,即首位址加上陣列的長度n(代表尾位址的下一位址)。

最後乙個引數是比較函式的名稱(自定義函式cmp),這個比較函式可以不寫,即第三個引數可以預設,這樣sort會預設按陣列公升序排序。

其中,自定義函式cmp:

bool cmp(int a,int b)

例子:對陣列a的0~n-1元素進行公升序排序,只要寫sort(a,a+n)即可;

2、sort擴充套件

①直接定義比較函式(最常用)— 結構體排序

student stu[

100]

;bool

cmp(student a,student b)

sort

(stu,stu+

100,cmp)

;

②使用標準庫函式

在標準庫中已經有現成的。是functional,我們include進來試試看。functional提供了一堆基於模板的比較函式物件,它們是:equal_to、not_equal_to、greater、greater_equal、less、less_equal。這些東西的用法看名字就知道了。在這裡,我麼sort要用到的也只是greater和less就足夠了,用法如下:

公升序:sort(begin,end,less())

降序:sort(begin,end,greater())

缺點:也只是實現簡單的排序,結構體不適用。

#include

#include

#include

#include

using

namespace std;

//簡單使用方法

sort

(a,a+

100,greater<

int>()

);//降序排列

sort

(a,a+

100,less<

int>()

);//公升序排列

③過載結構體或類的比較運算子

(1)在結構體內部過載

typedef

struct student};

vector v;

sort

(v.begin()

,v.end()

);

(2)在外部過載

vector v;

bool

operator

<

(const student& s1,

const student& s2)

sort

(v.begin()

,v.end()

);

注意:一定要過載《運算子,因為系統預設是降序,用的是《運算子。

④宣告比較類(少用)

struct less};

sort

(sutvector.

begin()

,stuvector.

end(),

less()

);

詳見:

sort函式詳解

使用 include using namespace std 作用 排序 時間複雜度 n lg n 實現原理 sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和推排序。系統會根據你的資料形式和資料量自動選擇合適的排序方法,這並不是說它每次排序只選擇一種方法,它是在...

sort函式詳解

sort函式詳解 史上最完整qaq 閱讀目錄 使用 include using namespace std 作用 排序 時間複雜度 n lg n 實現原理 sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序和推排序。系統會根據你的資料形式和資料量自動選擇合適的排序方...

sort函式用法詳解

用於c 中,對給定區間所有元素進行排序。標頭檔案是 include sort函式進行快速排序,時間複雜度為n log2n,比冒泡之類的要省時不少 sort函式使用模板 sort start,end,排序方法 1.第乙個引數是要排序陣列的起始位址 3.第三個是排序的方法,可不填,預設公升序 一般是直接...