定義:
sort函數用於C++中,對給定區間所有元素進行排序,默認為升序,也可進行降序排序。sort函數進行排序的時間復雜度為nlog2n,比冒泡之類的排序算法效率要高,sort函數包含在頭文件為#include<algorithm>的c++標准庫中。
語法:
sort(start,end,cmp)
(1)start表示要排序數組的起始地址;
(2)end表示數組結束地址的下一位;
(3)cmp用於規定排序的方法,可不填,默認升序。
時間復雜度:
時間復雜度為nlog2(n),執行效率較高。
功能:
sort函數用於C++中,對給定區間所有元素進行排序,默認為升序,也可進行降序排序。
一般是直接對數組進行排序,例如對數組a[10]排序,sort(a,a+10)。而sort函數的強大之處在可與cmp函數結合使用,即排序方法的選擇。
sort類函數總結:
函數名 | 功能描述 |
sort | 對給定區間所有元素進行排序 |
stable_sort | 對給定區間所有元素進行穩定排序 |
partial_sort | 對給定區間所有元素部分排序 |
partial_sort_copy | 對給定區間復制並排序 |
nth_element | 找出給定區間的某個位置對應的元素 |
is_sorted | 判斷一個區間是否已經排好序 |
partition | 使得符合某個條件的元素放在前面 |
stable_partition | 相對穩定的使得符合某個條件的元素放在前面 |
常用的cmp函數:
(1)對一組數據排序,使得數據從大到小
我們知道sort函數默認是從小到大排序的,所以我們需要定義一個cmp函數。
模板:
bool cmp(int a , int b) { return a>b; }
例子:對n組數據從大到小進行排列
#include<bits/stdc++.h> using namespace std; bool cmp(int a,int b) { return a>b; } int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n,cmp); for(int i=0;i<n;i++) { cout<<a[i]<<" "; } }
(2)給出幾組數據,使得排序得到一個最小(最大)的數字(拼數)
模板:
bool cmp(string a,string b) { return a+b<b+a; //從小到大排列 } bool cmp(string a,string b) { return a+b>b+a; //從大到小排列 }
例子:對n做數據進行排列,使得組成的數據最小
#include <bits/stdc++.h> using namespace std; bool cmp(string a,string b) { return a+b<b+a; } int main() { int n; cin>>n; string a[20]; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n,cmp); for(int i=0;i<n;i++) cout<<a[i]; }