sort()用於c++中,對給定區間所有或部分元素進行排序。屬於c++語言的stl模板(standard templates library)。標頭檔案是#include
它將多種排序方法綜合,比手寫的普通排序快
複雜度為 o(n log2 n)
格式1:
sort
(區間起始位置,區間結束位置)
;
這樣系統會預設按此區間的公升序排列。
舉個栗子:
#include
#include
using
namespace std;
int a[10]
;int
main()
輸入:
那如果想使用sort() 實現降序排列呢?
格式2:
bool
cmp(類 a,類b)
sort
(區間起始位置,區間結束位置,cmp)
;
在這裡,cmp()函式是對於sort()函式定義的一種排序規則,sort()函式會一絲不苟的按照cmp()函式來排序。
cmp()函式裡的類取決於要進行排序的資料的型別.
舉個栗子:
#include
#include
using
namespace std;
bool
cmp(
int a,
int b)
int a[10]
;int
main()
輸入:
這樣就實現了降序排列
那如果我們要對於字串按字典序排列呢?
格式3:
sort
(區間起始位置,區間結束位置)
;
注意這裡的區間是string或char型別的
再舉個栗子:
#include
#include
using
namespace std;
char ch[10]
;int
main()
輸入:
輸入:
而對於結構體呢?
格式4:
struct t
a[100];
bool
cmp(t a,t b)
sort
(區間起始位置,區間結束位置,cmp)
;
因為結構體不是常用的資料型別(如 int,char,string等),而且結構體通常擁有多個成員,代表不同的值。也正是因此,sort()函式不知道應該按什麼來排序,所以要用到cmp()函式來定義排序規則
下面以一道題目來說明這個格式的用法:
noip2005 提高組試題 誰拿了最多獎學金
題目描述
某校的慣例是在每學期的期末考試之後發放獎學金。發放的獎學金共有五種,獲取的條件各自不同:
現在給出若干學生的相關資料,請計算哪些同學獲得的獎金總數最高(假設總有同學能滿足獲得獎學金的條件)。
輸入輸出格式
輸入格式:
第一行是1個整數n(1≤n≤100)n(1≤n≤100),表示學生的總數。
接下來的n行每行是一位學生的資料,從左向右依次是姓名,期末平均成績,班級評議成績,是否是學生幹部,是否是西部省份學生,以及發表的**數。姓名是由大小寫英文本母組成的長度不超過20的字串(不含空格);期末平均成績和班級評議成績都是0到100之間的整數(包括0和100);是否是學生幹部和是否是西部省份學生分別用1個字元表示,y表示是,n表示不是;發表的**數是0到10的整數(包括0和10)。每兩個相鄰資料項之間用乙個空格分隔。
輸出格式:
包括3行。
第1行是獲得最多獎金的學生的姓名。
第2行是這名學生獲得的獎金總數。如果有兩位或兩位以上的學生獲得的獎金最多,輸出他們之中在輸入檔案**現最早的學生的姓名。
第3行是這n個學生獲得的獎學金的總數。
樣例輸入:4
yaolin 87 82 y n 0
chenruiyi 88 78 n y 1
lixin 92 88 n n 0
zhangqin 83 87 y n 1
樣例輸出:
chenruiyi
9000
28700
**:
#include
#include
using
namespace std;
struct s //定義結構體,儲存學生的資訊
a[105];
int n,ans;
bool
cmp(s a,s b)
//定義排序規則
intmain()
sort
(a,a+n,cmp)
;//排序
cout<
.name<
.m<
return0;
}
最後,靈活地利用sort()和cmp()函式,可以將sort()函式的價值發揮至最大
that』s all. 謝謝**,如有意見歡迎提出。
C STL sort 函式的用法
c stl sort 函式的用法 c sort 排序函式用法詳解 c 中sort函式使用方法 c 標準模板庫函式sort的那些事兒 sort函式 1.sort函式包含在標頭檔案為 include的c 標準庫中,呼叫標準庫里的排序方法可以實現對資料的排序,但是sort函式是如何實現的,我們不用考慮!2...
C STL sort原始碼分析
stl的sort演算法 當區間長度小於閾值 通常為5 20,stl取16 時,直接採用插入排序,因為插入排序的常係數比較小,資料量小時有不錯的效果。當區間長度大於閾值時,採用內省排序 introsort 其行為在大部分情況下幾乎與三數取中quick sort完全相同。直到下面兩種情況停止 當遞迴深度...
c 學習摘要
1.析構函式為什麼多為虛函式 基類的成員函式如果為虛函式,那麼其子類可以重新實現該函式,如果基類成員函式不為虛函式,那麼子類如果想擁有該方法需要過載。析構函式在物件銷毀時呼叫,用以銷毀物件內那些未被銷毀的變數。這就要求子類可以有自己的析構函式,來銷毀自己的需要銷毀的變數。2.什麼是純虛函式 基類本身...