c++ sort

用法

1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std;

2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n)

3、Sort函数有三个参数:(第三个参数可不写)

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序

2个参数排序

sort(v.begin(), v.end());

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     int a[10] = { 2, 4, 1, 23, 5, 76, 0, 43, 24, 65 }, i;
 7     for (i = 0; i<10; i++)
 8         cout << a[i] << endl;
 9     sort(a, a + 10);
10     for (i = 0; i<20; i++)
11         cout << a[i] << endl;
12     system("pause");
13     return 0;
14 }

自定义fun排序

i>j 降序;

i<j 升序;

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 bool sfun(int i, int j){
 5     return i > j;
 6 }
 7 int main()
 8 {
 9     int a[20] = { 2, 4, 1, 23, 5, 76, 0, 43, 24, 65 }, i;
10     for (i = 0; i<20; i++)
11         cout << a[i] << endl;
12     sort(a, a + 20, sfun);
13     for (i = 0; i<20; i++)
14         cout << a[i] << endl;
15     system("pause");
16     return 0;
17 }

 

结构体排序;

 

//需要用static
//2. sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。 invalid use of non-static member function
//因为:非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。

静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class Solution {
public:
    static bool sfun(Interval a,Interval b){ 

        return a.start<b.start;
    }
    void test (vector<Interval>& intervals) {

        sort(intervals.begin(),intervals.end(),sfun);
    }
};

 

posted @ 2018-12-25 12:54  乐乐章  阅读(874)  评论(0编辑  收藏  举报