sort()函数
?
用于C++中,對(duì)給定區(qū)間所有元素進(jìn)行排序。頭文件是
#include <algorithm> using namespace stdsort函數(shù)見下表:
| sort | 對(duì)給定區(qū)間所有元素進(jìn)行排序 |
| stable_sort | 對(duì)給定區(qū)間所有元素進(jìn)行穩(wěn)定排序 |
| partial_sort | 對(duì)給定區(qū)間所有元素部分排序 |
| partial_sort_copy | 對(duì)給定區(qū)間復(fù)制并排序 |
| nth_element | 找出給定區(qū)間的某個(gè)位置對(duì)應(yīng)的元素 |
| is_sorted | 判斷一個(gè)區(qū)間是否已經(jīng)排好序 |
| partition | 使得符合某個(gè)條件的元素放在前面 |
| stable_partition | 相對(duì)穩(wěn)定的使得符合某個(gè)條件的元素放在前面 |
sort函數(shù)的用法(C++排序庫函數(shù)的調(diào)用)
對(duì)數(shù)組進(jìn)行排序,在c++中有庫函數(shù)幫我們實(shí)現(xiàn),這們就不需要我們自己來編程進(jìn)行排序了。
(一)為什么要用c++標(biāo)準(zhǔn)庫里的排序函數(shù)
Sort()函數(shù)是c++一種排序方法之一,學(xué)會(huì)了這種方法也打消我學(xué)習(xí)c++以來使用的冒泡排序和選擇排序所帶來的執(zhí)行效率不高的問題!因?yàn)樗褂玫呐判蚍椒ㄊ穷愃朴诳炫诺姆椒?#xff0c;時(shí)間復(fù)雜度為n*log2(n),執(zhí)行效率較高!
(二)c++標(biāo)準(zhǔn)庫里的排序函數(shù)的使用方法
I)Sort函數(shù)包含在頭文件為#include<algorithm>的c++標(biāo)準(zhǔn)庫中,調(diào)用標(biāo)準(zhǔn)庫里的排序方法可以不必知道其內(nèi)部是如何實(shí)現(xiàn)的,只要出現(xiàn)我們想要的結(jié)果即可!
II)Sort函數(shù)有三個(gè)參數(shù):
(1)第一個(gè)是要排序的數(shù)組的起始地址。
(2)第二個(gè)是結(jié)束的地址(最后一位要排序的地址的下一地址)
(3)第三個(gè)參數(shù)是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個(gè)參數(shù),此時(shí)默認(rèn)的排序方法是從小到大排序。
Sort函數(shù)使用模板:
Sort(start,end,排序方法)
下面就具體使用sort()函數(shù)結(jié)合對(duì)數(shù)組里的十個(gè)數(shù)進(jìn)行排序做一個(gè)說明!
例一:sort函數(shù)沒有第三個(gè)參數(shù),實(shí)現(xiàn)的是從小到大
#include<iostream>#include<algorithm>using namespace std;int main(){int a[10]={9,6,3,8,5,2,7,4,1,0};for(int i=0;i<10;i++)cout<<a[i]<<endl;sort(a,a+11);for(int i=0;i<10;i++)cout<<a[i]<<endl;return 0;}例二
通過上面的例子,會(huì)產(chǎn)生疑問:要實(shí)現(xiàn)從大到小的排序腫么辦?
這就如前文所說需要在sort()函數(shù)里的第三個(gè)參數(shù)里做文章了,告訴程序我要從大到小排序!
需要加入一個(gè)比較函數(shù)compare(),此函數(shù)的實(shí)現(xiàn)過程是這樣的
bool compare(int a,int b){return a>b;}這就是告訴程序要實(shí)現(xiàn)從大到小的排序的方法!
#include<iostream>#include<algorithm>using namespace std;bool compare(int a,int b){return a>b;}int main(){int a[10]={9,6,3,8,5,2,7,4,1,0};for(int i=0;i<10;i++)cout<<a[i]<<endl;sort(a,a+10,compare);//在這里就不需要對(duì)compare函數(shù)傳入?yún)?shù)了,//這是規(guī)則for(int i=0;i<10;i++)cout<<a[i]<<endl;return 0;}假設(shè)自己定義了一個(gè)結(jié)構(gòu)體nodestruct node{int a;int b;double c;}有一個(gè)node類型的數(shù)組node arr[100],想對(duì)它進(jìn)行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b還相同,就按c降序排列。就可以寫這樣一個(gè)比較函數(shù):以下是代碼片段:bool cmp(node x,node y){if(x.a!=y.a) return x.a<y.a;if(x.b!=y.b) return x.b>y.b;return x.c>y.c;}?
cmp函數(shù)進(jìn)行二級(jí)排序:
?
bool comp( time a,time b) {if(a.t<b.t)return true;else if(a.t>b.t)return false;elseif(a.cost<b.cost)return true;?return false; }
此時(shí)結(jié)構(gòu)體先是根據(jù)t進(jìn)行升序排序 ,后按照cost進(jìn)行升序排序
?
總結(jié)
- 上一篇: Saving HDU
- 下一篇: Super Jumping! Jumpi