STL中sort 函式的用法

2021-07-10 14:39:05 字數 2312 閱讀 9052

在做acm題的過程中,演算法中經常會用到排序的處理,自己寫排序有點麻煩,最主要是記不住排序演算法的**。。。

stl中的sort函式有兩種:

template

ranit>

void 

sort(ranit 

fist, 

ranit 

last);

template

ranit, 

class 

pred>

void 

sort(ranit 

fist, 

ranit 

last, 

pred 

pr);

1.預設的sort函式是按公升序排。

sort(a,a+n);  

//兩個引數分別為待排序陣列的首位址和尾位址

2.可以自己寫乙個cmp函式,按特定意圖進行排序,例如結構體,這個是比較好用的。

例如:int cmp( const int &a, const int &b )

sort(a,a+n,cmp);//是對陣列a降序排序

也可以對結構體進行排序。

例如杭電oj裡1009題可以用結構體來解決:

//hdoj_1009 貪心,輸入輸出格式可能不對

#include

#include

#include

#define max 1000

using namespace std;

struct node

;int cmp(const node a,const node b)

else return 0;

}int main()

int m,n;

scanf("%d %d",&m,&n);

while(m != -1 && n != -1)

sort(list,list+n,cmp);

double sum=0.0;

for(i=0;m>0&&i

else

} printf("sum is:%.3lf\n",sum);

scanf("%d %d",&m,&n); 

} getchar();

getchar();

return 0;

}其實還有qsort的排序庫函式,不過這個與stl中的sort函式使用方法不大相同,因為這裡的qsort引數均為void 型別所以要轉一下,自定義的比較函式也會有不同,不同的資料型別也不一樣,例如:

一、對int型別陣列排序 

int num[100]; 

int cmp ( const void *a , const void *b ) 

qsort(num,100,sizeof(num[0]),cmp);

二、對char型別陣列排序(同int型別) 

char word[100]; 

int cmp( const void *a , const void *b )

qsort(word,100,sizeof(word[0]),cmp); 

三、對double型別陣列排序(特別要注意) 

double in[100]; 

int cmp( const void *a , const void *b )

qsort(in,100,sizeof(in[0]),cmp); 

四、對結構體一級排序 

struct in

s[100];

//按照data的值從小到大將結構體排序,關於結構體內的排序關鍵資料data的型別可以很多種,參考上面的例子寫 

int cmp( const void *a ,const void *b)

qsort(s,100,sizeof(s[0]),cmp); 

五、對結構體

struct in

s[100]; 

//按照x從小到大排序,當x相等時按照y從大到小排序 

int cmp( const void *a , const void *b )

qsort(s,100,sizeof(s[0]),cmp); 

六、對字串進行排序 

struct in 

s[100]; 

//按照結構體中字串str的字典順序排序 

int cmp ( const void *a , const void *b ) 

qsort(s,100,sizeof(s[0]),cmp); 

七、計算幾何中求凸包的cmp 

int cmp(const void *a,const void *b) //重點cmp函式,把除了1點外的所有點,旋轉角度排序 

借鑑:

STL中sort函式用法簡介

做 acm題的時候,排序是一種經常要用到的操作。如果每次都自己寫個冒泡之類的 o n 2 排序,不但程式容易超時,而且浪費寶貴的比賽時間,還很有可能寫錯。stl裡面有個 sort函式,可以直接對陣列排序,複雜度為 n log2 n 使用這個函式,需要包含標頭檔案。這個函式可以傳兩個引數或三個引數。第...

STL中的sort函式

b站二面時,面試官問了乙個問題,沒打出來感覺挺虧的。問題是 stl中的sort函式用的什麼排序演算法?這個問題我之前看面經的時候,看了一眼,但是當時沒有仔細研究過。大致知道裡面用了快速排序。stl的sort 演算法,資料量大時採用quick sort,分段遞迴排序。一旦分段後的資料量小於某個閾值,為...

stl中sort函式詳解

1.sort 函式的形式 sort first pointer,first pointer n,cmp 函式的第乙個引數是陣列的首位址,一般寫上陣列名就可以,因為陣列名是乙個指標常量。第二個引數相對較好理解,即首位址加上陣列的長度n。最後乙個引數是比較函式的名稱 一般比較函式名字都用cmp,當然這個...