FreqAlgorithm

排序

# 1
template <class RandomAccessIterator> 
  void sort (RandomAccessIterator first, RandomAccessIterator last);

# 2
template <class RandomAccessIterator, class Compare>
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

数组排序

std::sort

#include <algorithm>
#include <functional>
#include <array>
#include <iostream>

int main()
{
    std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; 

    // 用默认的 operator< 排序
    std::sort(s.begin(), s.end());
    for (auto a : s) {
        std::cout << a << " ";
    }   
    std::cout << '\n';

    // 用标准库比较函数对象排序
    std::sort(s.begin(), s.end(), std::greater<int>());
    for (auto a : s) {
        std::cout << a << " ";
    }   
    std::cout << '\n';

    // 用自定义函数对象排序
    struct {
        bool operator()(int a, int b) const
        {   
            return a < b;
        }   
    } customLess;
    std::sort(s.begin(), s.end(), customLess);
    for (auto a : s) {
        std::cout << a << " ";
    }   
    std::cout << '\n';

    // 用 lambda 表达式排序
    std::sort(s.begin(), s.end(), [](int a, int b) {
        return b < a;   
    });
    for (auto a : s) {
        std::cout << a << " ";
    } 
    std::cout << '\n';
}

qsort

#include <iostream>
#include <stdlib.h>

using namespace std;

void display(int arr[], int n) {
    for (int i=0; i < n; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int cmpa(const void *a, const void *b) {
    return *((int*)a) - *((int*)b);
}

int cmpb(const void *a, const void *b) {
    return *((int*)b) - *((int*)a);
}

int main() {
    int arri[8] = {1, 4, 2, 3, 9, 0, -1, 2};
    qsort(arri, 8, sizeof(int), cmpa);
    display(arri, 8);

    int arrj[8] = {1, 4, 2, 3, 9, 0, -1, 2};
    qsort(arrj, 8, sizeof(int), cmpb);
    display(arrj, 8);
    return 0;
}

/** Output
-1 0 1 2 2 3 4 9 
9 4 3 2 2 1 0 -1
*/

二维数组排序

#include <iostream>

using namespace std;

int cmp(const void *pa, const void *pb) {
    const int *pc = (const int *)pa;
    const int *pd = (const int *)pb;
    return pc[0] - pd[0];
}

int main() {
    int n;
    cin >> n;
    int arr[n][2];
    for (int i = 0; i < n; ++i) {
        cin >> arr[i][0] >> arr[i][1];
    }
    cout << sizeof(arr[0]) << endl;
    qsort(arr, n, sizeof(arr[0]), cmp);
    for (int i = 0; i < n; ++i) {
        cout << arr[i][0] << " " << arr[i][1] << endl;
    }
    return 0;
}

/** Input
3  
1 1
2 2
0 0

// Output
8
0 0
1 1
2 2
*/

结构体排序

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

struct A {
public:
    int a, b;
};

int cmp(const void *pa, const void *pb) {
    return ((A*)pa)->a - ((A*)pb)->a;
}

int cmpb(const void *pa, const void *pb) {
    return ((A*)pa)->b - ((A*)pb)->b;
}

int main() {
    int cnt = 5;
    A a[cnt];
    for (int i = 0; i < cnt; i++) {
        a[i].a = i;
        a[i].b = cnt -i;
        cout << a[i].a << " " << a[i].b << endl;
    }
    cout << endl;
    qsort(a, cnt, sizeof(a[0]), cmp);
    for (int i = 0; i < cnt; i++) {
        cout << a[i].a << " " << a[i].b << endl;
    }

    cout << endl;
    qsort(a, cnt, sizeof(a[0]), cmpb);
    for (int i = 0; i < cnt; i++) {
        cout << a[i].a << " " << a[i].b << endl;
    }
    return 0;
}

/** Output
0 5
1 4
2 3
3 2
4 1

0 5
1 4
2 3
3 2
4 1

4 1
3 2
2 3
1 4
0 5
*/

数据结构初始化

map

// Initializer list
std::map <int, std::string> x { 
  { 42, "foo" }, 
  { 3, "bar" } 
};

最后更新于

这有帮助吗?