C++ 中的sort排序用法

C中的qsort()採用的是快排算法,C++的sort()則是改進的快排算法。二者的時間複雜度都是n*(logn),可是實際應用中,sort()通常要快些,建議使用sort()。ios

STL中就自帶了排序函數sortsort 對給定區間全部元素進行排序 要使用此函數只需用#include <algorithm> sort便可使用,語法描述爲:
sort(begin,end),表示一個範圍,例子:c++

#include <algorithm>
int main()
{
  int a[20]={2,4,1,23,5,76,0,43,24,65},i;
  for(i=0;i<20;i++)
    cout<<a[i]<<endl;
  sort(a,a+20);
  for(i=0;i<20;i++)
    cout<<a[i]<<endl;
  return 0;
}

 

輸出結果將是把數組a按升序排序,說到這裏可能就有人會問怎麼樣用它降序排列呢?這就是下一個討論的內容.
一種是本身編寫一個比較函數來實現,接着調用三個參數的sort:sort(begin,end,compare)就成了。對於list容器,這個方法也適用,把compare做爲sort的參數就能夠了,即:sort(compare).

1)本身編寫compare函數:算法

bool compare(int a,int b)
{
    return a<b; //升序排列,若是改成return a>b,則爲降序
}

 

#include <algorithm>
bool compare(int a,int b)
{
  return a<b; //升序排列,若是改成return a>b,則爲降序
}
int main() {   int a[20]={2,4,1,23,5,76,0,43,24,65},i;   for(i=0;i<20;i++)     cout<<a[i]<<endl;   sort(a,a+20,compare);   for(i=0;i<20;i++)     cout<<a[i]<<endl;   return 0; }

 

數組!!!對數組進行排序

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;
}

 

 

以結構體爲例的二級排序:數組

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct link
{
    int a,b;
};
bool cmp(link x,link y)
{
    if(x.a==y.a)
        return x.b>y.b;
    return x.a>y.a;
}
int main()
{
    link x[4];
    for(int i=0;i<4;i++)
        cin>>x[i].a>>x[i].b;
    sort(x,x+4,cmp);
    for(int i=0;i<4;i++)
        cout<<x[i].a<<' '<<x[i].b<<endl;
    return 0;
 }

還能夠自定義更高級的多級排序……函數

相關文章
相關標籤/搜索