sort()函数
?
用于C++中,對給定區間所有元素進行排序。頭文件是
#include <algorithm> using namespace stdsort函數見下表:
| sort | 對給定區間所有元素進行排序 |
| stable_sort | 對給定區間所有元素進行穩定排序 |
| partial_sort | 對給定區間所有元素部分排序 |
| partial_sort_copy | 對給定區間復制并排序 |
| nth_element | 找出給定區間的某個位置對應的元素 |
| is_sorted | 判斷一個區間是否已經排好序 |
| partition | 使得符合某個條件的元素放在前面 |
| stable_partition | 相對穩定的使得符合某個條件的元素放在前面 |
sort函數的用法(C++排序庫函數的調用)
對數組進行排序,在c++中有庫函數幫我們實現,這們就不需要我們自己來編程進行排序了。
(一)為什么要用c++標準庫里的排序函數
Sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似于快排的方法,時間復雜度為n*log2(n),執行效率較高!
(二)c++標準庫里的排序函數的使用方法
I)Sort函數包含在頭文件為#include<algorithm>的c++標準庫中,調用標準庫里的排序方法可以不必知道其內部是如何實現的,只要出現我們想要的結果即可!
II)Sort函數有三個參數:
(1)第一個是要排序的數組的起始地址。
(2)第二個是結束的地址(最后一位要排序的地址的下一地址)
(3)第三個參數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數,此時默認的排序方法是從小到大排序。
Sort函數使用模板:
Sort(start,end,排序方法)
下面就具體使用sort()函數結合對數組里的十個數進行排序做一個說明!
例一:sort函數沒有第三個參數,實現的是從小到大
#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;}例二
通過上面的例子,會產生疑問:要實現從大到小的排序腫么辦?
這就如前文所說需要在sort()函數里的第三個參數里做文章了,告訴程序我要從大到小排序!
需要加入一個比較函數compare(),此函數的實現過程是這樣的
bool compare(int a,int b){return a>b;}這就是告訴程序要實現從大到小的排序的方法!
#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);//在這里就不需要對compare函數傳入參數了,//這是規則for(int i=0;i<10;i++)cout<<a[i]<<endl;return 0;}假設自己定義了一個結構體nodestruct node{int a;int b;double c;}有一個node類型的數組node arr[100],想對它進行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b還相同,就按c降序排列。就可以寫這樣一個比較函數:以下是代碼片段: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函數進行二級排序:
?
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; }
此時結構體先是根據t進行升序排序 ,后按照cost進行升序排序
?
總結
- 上一篇: Saving HDU
- 下一篇: Super Jumping! Jumpi