1、sort()函數(shù)是C++標(biāo)準(zhǔn)庫中的排序函數(shù),頭文件為algorithm
2、sort()函數(shù)時間復(fù)雜度:
我們最熟悉的冒泡排序和選擇排序的時間復(fù)雜度過高,不能滿足我們寫題的需要。sort函數(shù)的排序方法類似于快排方法,時間復(fù)雜度為n*log2(n)
3、sort()函數(shù)的參數(shù)
sort(起始地址,結(jié)束地址,比較器);
其中比較器可以省略,默認(rèn)升序
int arr[10]={5,3,6,0,2,8,2,6,9,11};
sort(arr,arr+10);
帶比較器的寫法(比較器可以根據(jù)自身的需要來寫,當(dāng)返回true時):
//首先我們要寫一個bool類型的方法,用來返回參數(shù)的比較結(jié)果
//當(dāng)比較器返回true時,第一個參數(shù)放在前面,第二個參數(shù)放在后面,即位置不變
//當(dāng)比較器返回false時,為兩元素交換位置
//這里要注意對參數(shù)相等時的處理
//因為可能會在兩者相等的時候交換位置,在一些特定的環(huán)境下會導(dǎo)致題解出錯
//比較器最好寫成static函數(shù)
//比較器的值可以使用引用類型,節(jié)省空間開銷
static bool cmp1(int &lhs,int &rhs)//升序
{return lhsreturn lhs>rhs;
}
sort(arr,arr+10,cmp1);//升序
sort(arr,arr+10,cmp1);//降序
4、對vector排序
vectorvec={5,3,6,0,2,8,2,6,9,11};
//比較器同對數(shù)組排序
sort(vec.begin(),vec.end(),cmp1);
sort(vec.begin(),vec.end(),cmp2);
5、對map進(jìn)行排序
這里要注意,map函數(shù)有一個按key值進(jìn)行的自動排序功能(降序)
typedef pairPAIR;
//比較器
//按value值進(jìn)行降序排序,value值相等key小的在前
static bool cmp_value(const PAIR& lhs,const PAIR& rhs)
{if(lhs.second == rhs.second)
{return lhs.keyrhs.second;
}
sort(m.begin(),m,end(),cmp_value);
6、不使用手寫的cmp函數(shù)
sortt函數(shù)的第三個參數(shù)可以用這樣的語句告訴程序你所采用的排序原則:
less<數(shù)據(jù)類型>()//從小到大排序
greater<數(shù)據(jù)類型>()//從大到小排序
sort(arr,arr+10,less());
7、lamdba形式的比較器
//lamdba形式
[](int &a,int &b){return areturn a
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文標(biāo)題:【C++】sort函數(shù)詳解-創(chuàng)新互聯(lián)
URL鏈接:http://muchs.cn/article12/iojdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、域名注冊、品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站設(shè)計公司、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容