C sort函式詳解(史上最完整QAQ)

2021-10-04 12:19:00 字數 2488 閱讀 8945

出處:

閱讀目錄

使用:#include

using namespace std;

作用:排序

時間複雜度:n*lg(n)

實現原理:sort並不是簡單的快速排序,它對普通的快速排序進行了優化,此外,它還結合了插入排序推排序。系統會根據你的資料形式和資料量自動選擇合適的排序方法,這並不是說它每次排序只選擇一種方法,它是在一次完整排序中不同的情況選用不同方法,比如給乙個資料量較大的陣列排序,開始採用快速排序,分段遞迴,分段之後每一段的資料量達到乙個較小值後它就不繼續往下遞迴,而是選擇插入排序,如果遞迴的太深,他會選擇推排序。

具體函式實現,請參考:

函式宣告:

#include

template

<

class

randomit

>

void

sort

( randomit first, randomit last )

;template

<

class

randomit

,class

compare

>

void

sort

( randomit first, randomit last, compare comp )

;

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

引數解釋: 第乙個引數是陣列的首位址,一般寫上陣列名就可以,因為陣列名是乙個指標常量。第二個引數相對較好理解,即首位址加上陣列的長度n(代表尾位址的下一位址)。最後乙個引數是比較函式的名稱(自定義函式cmp),這個比較函式可以不寫,即第三個引數可以預設,這樣sort會預設按陣列公升序排序

簡單例子:對陣列a的0~n-1元素進行公升序排序,只要寫sort(a,a+n)即可;對於向量v也一樣,sort(v.begin(),v.end())即可。

sort不只是能像上面那樣簡單的使用,我們可以對sort進行擴充套件,關鍵就在於第三個引數//情況一:陣列排列

int a[

100]

;bool

cmp1

(int a,

int b)

//int為陣列資料型別

sort

(a,a+

100,cmp1)

;//情況二:結構體排序

student stu[

100]

;bool

cmp2

(student a,student b)

sort

(stu,stu+

100,cmp2)

;注:比較方法也可以放在結構體中或類中定義。

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

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

#include

#include

#include

#include

using

namespace std;

//簡單使用方法

sort

(a,a+

100,greater<

int>()

);//降序排列

sort

(a,a+

100,less<

int>()

);//公升序排列

//情況一:在結構體內部過載

typedef

struct student};

vector v;

sort

(v.begin()

,v.end()

);//情況二:在外部過載

vector v;

bool

operator

<

(const student& s1,

const student& s2)

sort

(v.begin()

,v.end()

);

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

struct less};

sort

(sutvector.

begin()

,stuvector.

end(),

less()

);

sort函式詳解(史上最完整QAQ)

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

sort函式詳解(史上最完整QAQ)

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

SAP 史上最完整替代與取代資料

替代,這個一萬家企業估計就有二萬家企業需用到的名詞,可見其重要性,而根據本人之經驗,大概可以分為以下三種替代形式,我想這應該是關於sap替代或取代的最完整的文件。1.a物料也b物料可以互相替代,但是由物料計畫部門自由控制使用物料a還是使用物料b 2.在某個產品中,當物料a不夠時,才用物料b 3.當物...