• 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]
  • 相关阅读:
    拓扑排序
    数论初步(费马小定理)
    HDU
    HDU
    八月馒头
    萌新仓鼠,参上!
    新姿势
    字典树
    HDU
    Codeforce
  • 原文地址:https://www.cnblogs.com/xielei/p/10618877.html
Copyright © 2020-2023  润新知