C++ STL 中的 std::sort()

sort() 是  C ++ STL 中内置函数。此函数内部使用快速排序实现,故它的复杂性是O(Nlog(N))

sort 函数原型为

sort(startaddress, endaddress)

startaddress: 参加排序的第一个元素的地址
endaddress: 参加排序的最后一个元素的下一个连续元素的地址。
实际上sort()在[startaddress,endaddress)的范围内排序

 

#include <iostream> 
#include <algorithm> 
  
using namespace std; 
  
void show(int a[]) 
{ 
    for(int i = 0; i < 10; ++i) 
        cout << a[i] << " "; 
} 
  
int main() 
{ 
    int a[10]= {1, 5, 8, 9, 6, 7, 3, 4, 2, 0}; 
    cout << "\n 排序前数组为 : "; 
    show(a); 
  
    sort(a, a+10); 
  
    cout << "\n\n 排序后数组为 : "; 
    show(a); 
  
    return 0; 
  
} 

上面程序运行结果为:

 排序前数组为 : 1 5 8 9 6 7 3 4 2 0

 排序后数组为 : 0 1 2 3 4 5 6 7 8 9

默认情况下,sort()按升序对数组进行排序。

如何按降序排序?

sort()接受第三个参数,用于指定元素的排序顺序。我们可以传递“greater()”函数来按降序排序。

#include <bits/stdc++.h> 
using namespace std; 
  
int main() 
{ 
    int arr[] = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
  
    sort(arr, arr+n, greater<int>()); 
  
    cout << " 排序后数组为 : \n"; 
    for (int i = 0; i < n; ++i) 
        cout << arr[i] << " "; 
  
    return 0; 
} 

 上面程序运行结果为:

 排序后数组为 :
9 8 7 6 5 4 3 2 1 0

 如何按特定顺序排序?

我们也可以编写自己的比较器函数并将其作为第三个参数传递。

#include<bits/stdc++.h> 
using namespace std; 
  
// 一个时间间隔包括开始时间 start 和结束时间 end
struct Interval 
{ 
    int start, end; 
}; 
  
// 自定义比较函数以时间间隔的升序排序
bool compareInterval(Interval i1, Interval i2) 
{ 
    return (i1.start < i2.start); 
} 
  
int main() 
{ 
    Interval arr[] =  { {6,8}, {1,9}, {2,4}, {4,7} }; 
    int n = sizeof(arr)/sizeof(arr[0]); 
  
   
    sort(arr, arr+n, compareInterval); 
  
    cout << "时间间隔数组以开始时间升序排序后结果为 : \n"; 
    for (int i=0; i<n; i++) 
       cout << "[" << arr[i].start << "," << arr[i].end 
            << "] "; 
  
    return 0; 
} 

 

 上面程序运行结果为:

时间间隔数组以开始时间升序排序后结果为 :
[1,9] [2,4] [4,7] [6,8]

 

posted @ 2019-03-29 01:12  XLimp  阅读(8868)  评论(0编辑  收藏  举报