複製鏈接
請複製以下鏈接發送給好友

sort函數

鎖定
sort函數用於C++中,對給定區間所有元素進行排序,默認為升序,也可進行降序排序。sort函數進行排序的時間複雜度為n*log2n,比冒泡之類的排序算法效率要高,sort函數包含在頭文件為#include的c++標準庫中。 [1] 
中文名
sort函數
外文名
sort Function
頭文件
#include <algorithm>
用    途
對給定區間所有元素進行排序
所屬範疇
C++
功    能
升序、降序

sort函數函數介紹

sort()函數是定義在C++ STL 標準庫中的一個模板函數 ,它的作業是對容器或普通數組中指定範圍內的元素進行排序,排序規則默認以元素值的大小做升序排序,除此之外也可以選擇標準庫提供的其它排序規則(比如std::greater降序排序規則)。最重要的是可以使用函數的形式自定義排序規則,調用時只需要把自定義的排序函數作為參數傳入即可。 [5] 
要使用sort(),需要包含頭文件。
#include <algorithm>
語法
Sort(start,end,cmp)
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
參數 [5] 
(1)start表示要排序數組的起始地址;迭代器的起始位置,對於數組來説就是數組的首地址,一般寫上數組名就可以,因為數組名是一個指針常量。
(2)end表示數組結束地址的下一位;迭代器的結束位置,即首地址加上數組的長度n(代表尾地址的下一地址)。
(3)cmp用於規定排序的方法,可不填,默認升序。迭代器的結束位置,即首地址加上數組的長度n(代表尾地址的下一地址)。
功能
sort函數用於C++中,對給定區間所有元素進行排序,默認為升序,也可進行降序排序。
一般是直接對數組進行排序,例如對數組a[10]排序,sort(a,a+10)。而sort函數的強大之處在可與cmp函數結合使用,即排序方法的選擇。 [2] 
sort()函數是C++一種排序方法之一,相較冒泡排序和選擇排序所帶來的執行效率不高的問題,sort()函數使用的排序方法是類似於快速排序的方法,時間複雜度為n*log2(n),執行效率較高。 [3] 
sort類函數總結
sort函數見下表: [4] 
sort類函數名稱與功能描述表格
函數名
功能描述
sort
對給定區間所有元素進行排序
stable_sort
對給定區間所有元素進行穩定排序
partial_sort
對給定區間所有元素部分排序
partial_sort_copy
對給定區間複製並排序
nth_element
找出給定區間的某個位置對應的元素
is_sorted
判斷一個區間是否已經排好序
partition
使得符合某個條件的元素放在前面
stable_partition
相對穩定的使得符合某個條件的元素放在前面

sort函數函數示例

示例一
sort函數沒有第三個參數,實現的是從小到大(升序)排列: [4] 
#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()函數里的第三個參數了,告訴程序要從大到小排序。
需要加入一個比較函數compare(),此函數的實現過程如下: [2] 
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;
}
假設自己定義了一個結構體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;
}
參考資料
  • 1.    鄭莉,董淵,何江舟 . C++語言程序設計 :清華大學出版社,2010.7
  • 2.    [美] Stephen Prata. C++ Primer Plus :人民郵電出版社 , 2012.6
  • 3.    譚浩強 .C++程序設計(第3版): 清華大學出版社, 2015.8
  • 4.    李普曼 .C++ Primer中文版 :電子工業出版社, 2013.9
  • 5.    C++ sort()函數  .知乎[引用日期2023-08-26]