C STL sort 學習摘要

2021-09-25 03:11:45 字數 3397 閱讀 4133

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.什麼是純虛函式 基類本身...