排序 sort函數

sort函數見下表:
函數名 功能描述
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+10);
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
例二
經過上面的例子,會產生疑問:要實現從大到小的排序腫麼辦?
這就如前文所說須要在sort()函數裏的第三個參數裏作文章了,告訴程序我要從大到小排序!
須要加入一個比較函數complare(),此函數的實現過程是這樣的
1
2
3
4
bool complare(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;
}
假設本身定義了一個結構體node
struct 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;
}
相關文章
相關標籤/搜索