天天看點

sort之多類别用法

用于C++中,對給定區間所有元素進行排序。頭檔案是#include <algorithm> 中文名 Sort函數 頭檔案 #include <algorithm> 用    途 對給定區間所有元素進行排序 所屬範疇 C++ 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(),此函數的實作過程是這樣的 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; }

繼續閱讀