C++ sort排序函式的用法總結
標準模板庫STL中的sort()函式,時間複雜度為n*log2(n),執行效率較高。
用法:
①、sort()函式可以三個引數也可以兩個引數;
②、必須的標頭檔案 #include < algorithm>和using namespace std。
③、它使用的排序方法類似於快排,時間複雜度為n*log2(n)
sort()函式有三個引數:(第三個引數可不寫)
(1)第一個是要排序的陣列的起始地址。
(2)第二個是最後一位要排序的元素的下一位的地址。
(3)第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,此時預設的排序方法是從小到
大排序。
sort函式,左閉右開,即 int a[10]={2,4,1,23,5,76,0,43,24,65}。 sort(a,a+10)。
兩個引數用法:
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int a[10]={2,4,1,23,5,76,0,43,24,65};
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
sort(a,a+10); //STL中sort函式
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
return 0;
}
輸出結果是升序排列。(兩個引數的sort預設升序排序)
結果:
三個引數:
①、加入一個比較函式 complare():
#include<iostream>
#include <algorithm>
using namespace std;
bool complare(int a,int b){
return a>b;
}
int main(){
int a[10]={2,4,1,23,5,76,0,43,24,65};
//列印原陣列
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
//排序
sort(a,a+10,complare);
//列印排序後的陣列
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
return 0;
}
結果:
②、使用 less<資料型別>(),或 greater<資料型別>():
less<資料型別>()//從小到大排序
greater<資料型別>()//從大到小排序
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int a[10]={2,4,1,23,5,76,0,43,24,65};
//列印原陣列
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
//排序
sort(a,a+10,greater<int>());
//列印排序後的陣列
for(int i=0;i<10;i++){
cout<<a[i]<<" ";
}
return 0;
}
結果:
③、對向量vector排序:
1、使用 sort(vec.begin(),vec.end())排序;
2、使用sort(vec.begin(),vec.end(),greater<int>())排序。
vector<int> vec(arr,arr+10); // 用陣列元素初始化vector容器,左閉右開,即+元素數量 。
sort(vec.begin(),vec.end(),greater<int>()); // <>裡面只需裝容器所容納的元素的型別
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int arr[10]={5,6,1,9,3,7,3,1,0,8};
//vector容器存放arr陣列中的元素
vector<int> vec(arr,arr+10); //經典!用陣列元素初始化vector容器,左閉右開,即+元素數量
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
cout<<endl;
//使用預設排序方法:
sort(vec.begin(),vec.end());
cout<<"使用預設排序方法: ";
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
cout<<endl;
//使用greater<>()規則:
sort(vec.begin(),vec.end(),greater<int>()); //這就很神奇了!!!
cout<<"使用greater<>()規則: ";
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
return 0;
}
結果:
③、對字元陣列進行排序:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
char arr[11]="asdfghjklk";
sort(arr,arr+10,greater<char>());
for(int i=0;i<10;i++){
cout<<arr[i]<<" ";
}
return 0;
}
結果:
④、對字串排序:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string arr="asdfghjklk";
sort(arr.begin(),arr.end(),less<char>());
for(int i=0;i<10;i++){
cout<<arr[i]<<" ";
}
return 0;
}
結果:
⑤、 對結構體排序:
1、自定義規則;
2、運算子過載。
1、自定義規則:
#include<iostream>
#include<algorithm>
using namespace std;
struct student{
string name;
int age;
};
//自己定義的規則:按姓名從小到大排列,若姓名一樣,按年齡從小到大排列
bool comp(student s1,student s2){
if(s1.name==s2.name){
return s1.age<s2.age;
}
else{
return s1.name<s2.name;
}
}
int main(){
student s[100];
s[0].name="zhangsan";s[0].age=19;
s[1].name="zhangsan";s[1].age=18;
s[2].name="lisi";s[2].age=20;
sort(s,s+3,comp);//左閉右開,所以是對s[0]到s[2]排序
for(int i=0;i<3;i++){
cout<<s[i].name<<" "<<s[i].age<<endl;
}
return 0;
}
結果:
2、運算子過載:
bool operator < (const student &s) const
#include<iostream>
#include<algorithm>
using namespace std;
struct student{
string name;
int age;
bool operator < (const student &s)const{//符號過載
if(name==s.name){
return age<s.age;
}
else{
return name<s.name;
}
}
};
int main(){
student s[100];
s[0].name="zhangsan";s[0].age=19;
s[1].name="zhangsan";s[1].age=18;
s[2].name="lisi";s[2].age=20;
sort(s,s+3);//左閉右開,所以是對s[0]到s[2]排序
for(int i=0;i<3;i++){
cout<<s[i].name<<" "<<s[i].age<<endl;
}
return 0;
}
結果:
string 使用反向迭代器來完成逆序排列
#include <iostream>
using namespace std;
int main()
{
string str("cvicses"); //用()對字串賦值
string s(str.rbegin(),str.rend()); //反向迭代器,將字串str翻轉,賦值給字串s
cout << s <<endl; //列印字串s
return 0;
}
結果:
NOTICE:
資料量較大時,用sort不太好,比如,員工年齡那道題,這時就要自己寫排序函式了。
相關文章
- C++筆記— 排序函式sort() 和vector容器C++筆記排序函式
- 【c++】結構體sort排序C++結構體排序
- 排序(對於 sort 函式的使用)排序函式
- Python排序函式用法Python排序函式
- MySQL視窗函式用法總結MySql函式
- C++ 函式 realloc 的用法C++函式
- c++函式學習總結C++函式
- C++ replace() 函式用法C++函式
- C++中函式呼叫的用法C++函式
- C++ 序列操作函式最全總結C++函式
- C++函式修飾符總結C++函式
- C++回撥函式 用法C++函式
- sort()函式函式
- Arr::sort()輔助函式對多維陣列的排序函式陣列排序
- C++虛擬函式學習總結C++函式
- C++中push_back()函式的用法C++函式
- python用List的內建函式list.sort進行排序Python函式排序
- C++ partial_sort(部分排序)C++排序
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- 第三章:查詢與排序(下)----------- 3.28 特殊排序(利用sort函式)排序函式
- Sort排序專題(5)快速排序(QuickSort)(C++實現)排序UIC++
- Sort排序專題(7)歸併排序(MergeSort)(C++實現)排序C++
- C++中使用sort對常見容器排序C++排序
- 總結常用的字串函式字串函式
- Sigmoid函式總結Sigmoid函式
- sort排序排序
- GetModuleFileName函式的用法函式
- Instr函式的用法函式
- JS 中的函式 this 指向總結JS函式
- spark中的聚合函式總結Spark函式
- C++中行內函數的用法C++函數
- PHP常用函式總結PHP函式
- mysql日期函式總結MySql函式
- Python排序傻傻分不清?一文看透sorted與sort用法Python排序
- string 函式的基本用法函式
- 【Oracle的NVL函式用法】Oracle函式
- abs函式用法函式
- 去重函式unique,sort,erase的應用函式