C 中Sort的用法

2021-08-19 21:02:34 字數 2145 閱讀 8806

1.sort

標頭檔案:#include 時間複雜度: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());//降

序排列sort(a,a+100,less());//公升

序排列

//

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

typedef struct

student

};vector

v;sort(v.begin(),v.end());

//情況二:在外部過載

vectorv;

bool

operator

<(const student& s1, const student&s2)

sort(v.begin(),v.end());

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

struct

less

};sort(sutvector.begin(),stuvector.end(),less());

c 中sort 的用法

c sort 函式的用法近來看了c 標準庫這本書,學到了很多,就把這其中的一點c sort 函式的用法寫下來和大家分享吧!一 為什麼要用c 標準庫里的排序函式sort 函式是c 一種排序方法之一,學會了這種方法也打消我學習c 以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方...

c 中sort()函式的用法

在c 中我們經常會用到排序函式sort 今天我們一起來學習一下sort 函式的具體用法.1 sort函式可以三個引數也可以兩個引數,必須的標頭檔案 include algorithm 和using namespace std 2 它使用的排序方法是類似於快排的方法,時間複雜度為n log2 n 3 ...

C 中的sort排序用法

c中的qsort 採用的是快排演算法,c 的sort 則是改進的快排演算法。兩者的時間複雜度都是n logn 但是實際應用中,sort 一般要快些,建議使用sort stl中就自帶了排序函式sort對給定區間所有元素進行排序 要使用此函式只需用 include sort即可使用,語法描述為 sort...