轉載自:https://blog.csdn.net/weixin_39908462/article/details/110614054
一.sort函數
1.sort函數包含在頭文件為#include<algorithm>
的c++標准庫中,調用標准庫里的排序方法可以實現對數據的排序,但是sort函數是如何實現的,我們不用考慮!
2.sort函數的模板有三個參數:
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
(1)第一個參數first
:是要排序的數組的起始地址。
(2)第二個參數last
:是結束的地址(最后一個數據的后一個數據的地址)
(3)第三個參數comp
是排序的方法:可以是從升序也可是降序。如果第三個參數不寫,則默認的排序方法是從小到大排序。
3.實例
sort第三個參數不進行設定默認進行的是從小到大的排序。
#include<iostream>
#include<algorithm>
using namespace std;
main()
{
//sort函數第三個參數采用默認從小到大
int a[]={45,12,34,77,90,11,2,4,5,55};
sort(a,a+10);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
}
這里可以看到是sort(a,a+10),但是數組a一共只有9個元素,為什么是a+10而不是a+9呢?
因為sort方法實際上最后一位地址對應的數是不取的,
而且vector,set,map這些容器的end()取出來的值實際上並不是最后一個值,而end的前一個才是最后一個值!
需要用prev(xxx.end()),才能取出容器中最后一個元素。
如果第三個參數進行設定,可以實現從大到小的排序,例如以下例子,自定義第三個參數,實現從大到小排序。
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b);
main(){
//sort函數第三個參數自己定義,實現從大到小
int a[]={45,12,34,77,90,11,2,4,5,55};
sort(a,a+10,cmp);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
}
//自定義函數
bool cmp(int a,int b){
return a>b;
}