sort()函數詳解
sort()函數可以將一個容器或者數組的值進行排序,還可以自定義排序方式。sort()是基于頭文件<algorithm>庫下的一個函數,所以要調用sort(),就需要添加頭文件。
基本排序方法
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int arr[] = { 2,4,7,1,3 };
return 0
}
一.正常排序
我們可以通過寫
sort(arr, arr + 5);
我們就可以將arr中從開始的元素到第5個元素按從小到大的順序進行排序。
二.排序數據中間個別元素
如果我們寫
sort(arr + i, arr + j);
那么被排序的就是arr[i]到arr[j - i],其他元素將保持原位置。
三.從大到小排序或按照一個規(guī)則排序
如果我們希望arr中的元素從大到小排序(或者按照某一個規(guī)則進行排序),我們可以再為sort傳入第三個參數--“排序方法”:
sort(arr, arr + 5, greater<int>());
其中greater表示“跟大”的意思,<int>表示待排序的數組元素類型為int,整個代碼表示讓一個元素類型為整數的數組從大到小排序 。
四.最終代碼
自此我們的程序會成為:
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int arr[] = { 2,4,7,1,3 };
//=============排序從小到大======
sort(arr, arr + 5);
for (int i = 0; i < 5; i++)
cout << arr[i] << " ";
cout << endl;
//=============從大到小======
sort(arr, arr + 5, greater<int>());
for (int i = 0; i < 5; i++)
cout << arr[i] << " ";
cout << endl;
//=============排序中間元素======
sort(arr + 1, arr + 4);
for (int i = 0; i < 5; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
執(zhí)行后輸出如下

自定義排序--基礎
我們可以之后再寫一個sort,在這個sort中,我們可以再為sort傳入第三個參數--“排序方法”。
首先我們在int main()之前加上:
cmp函數,定義要為bool類型,具體就是傳入x,y,兩個參數進行比較。
如果返回值為真就會將第一個參數排在第二個參數前(注意,不能出現等號,如果出現等號,一定要給該值為false)。理解困難的話,其實就是看返回值這,返回x > y,前面大于后面就是從大到小排序。
bool cmp(int x, int y){
return x > y;
}
并且在sort的第三個參數中傳入cmp,sort函數是系統(tǒng)定義好的,可以直接支持函數地址作為參數。
sort(arr, arr + 10, cmp);
具體代碼如下
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x, int y){
return x > y;
}
int main() {
int arr[] = { 2,4,7,1,3,5,9,6,8,10};
sort(arr, arr + 10, cmp);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
執(zhí)行后輸出如下

我們再舉一個例子
例如我們要將一個數組arr按照除3的余數從小到大排序來進行排序。
我們先寫一個cmp,因為可能有相等的余數,如果相等我們按照其本身的大小進行從小到大排序。
bool cmp(int x, int y){
if(x % 3 != y % 3)
return x % 3 < y % 3;
else
return x < y;
}
具體代碼如下
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x, int y){
if(x % 3 != y % 3)
return x % 3 < y % 3;
else
return x < y;
}
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10};
sort(arr, arr + 10, cmp);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
運行結果如下

自定義排序--結構體
下面我們再來了解sort對于結構體的排序,我們可以按照結構體中某個元素來進行排序。
例如,我們寫一個學生的結構體,里面有姓名和成績,我們要按照成績從大到小排序。
我們先寫一個結構體Student
struct Student{
string name;
int score;
};
我們要按照得分來進行排序
bool cmp(Student x, Student y){
return x.score > y.score;
}
具體代碼如下
#include<iostream>
#include<algorithm>
using namespace std;
struct Student {
string name;
int score;
};
bool cmp(Student x, Student y) {
return x.score > y.score;
}
int main() {
Student stu[4];
stu[0].name = "A";
stu[0].score = 80;
stu[1].name = "B";
stu[1].score = 75;
stu[2].name = "C";
stu[2].score = 96;
stu[3].name = "D";
stu[3].score = 85;
sort(stu, stu + 4, cmp);
for (int i = 0; i < 4; i++) {
cout << stu[i].name << ":" << stu[i].score << endl;
}
return 0;
}
運行結果如下文章來源:http://www.zghlxwxcb.cn/news/detail-736180.html

以上就是我對sort函數的見解,如果此文章有錯誤或者有不同的見解歡迎評論或者私信。文章來源地址http://www.zghlxwxcb.cn/news/detail-736180.html
到了這里,關于C++ sort()函數具體用法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!