• 个人简介

    std::sort (快速排序/内省排序)

    时间复杂度:O(N log N)‌

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    int main() {
        vector<int> v = {5, 3, 1, 4, 2};
        // 默认升序排序
        sort(v.begin(), v.end());
        // 降序排序
        sort(v.begin(), v.end(), greater<int>());
        // 自定义比较函数
        sort(v.begin(), v.end(), [](int a, int b) {
            return a % 3 < b % 3;
        });
        return 0;
    }
    

    基础排序算法

    冒泡排序

    时间复杂度:O(N²)‌

    void bubbleSort(vector<int>& arr) {
        int n = arr.size();
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    swap(arr[j], arr[j+1]);
                }
            }
        }
    }
    
    

    选择排序

    时间复杂度:O(N²)‌

    void selectionSort(vector<int>& arr) {
        int n = arr.size();
        for (int i = 0; i < n-1; i++) {
            int min_idx = i;
            for (int j = i+1; j < n; j++) {
                if (arr[j] < arr[min_idx]) {
                    min_idx = j;
                }
            }
            swap(arr[i], arr[min_idx]);
        }
    }
    
    

    插入排序

    时间复杂度:O(N²)‌

    void insertionSort(vector<int>& arr) {
        int n = arr.size();
        for (int i = 1; i < n; i++) {
            int key = arr[i];
            int j = i - 1;
            while (j >= 0 && arr[j] > key) {
                arr[j+1] = arr[j];
                j--;
            }
            arr[j+1] = key;
        }
    }
    

    高效排序算法

    归并排序

    时间复杂度:O(N log N)‌

    void merge(vector<int>& arr, int l, int m, int r) {
        vector<int> temp(r - l + 1);
        int i = l, j = m+1, k = 0;
        
        while (i <= m && j <= r) {
            temp[k++] = arr[i] <= arr[j] ? arr[i++] : arr[j++];
        }
        while (i <= m) temp[k++] = arr[i++];
        while (j <= r) temp[k++] = arr[j++];
        
        for (int p = 0; p < temp.size(); p++) {
            arr[l + p] = temp[p];
        }
    }
    
    void mergeSort(vector<int>& arr, int l, int r) {
        if (l < r) {
            int m = l + (r - l) / 2;
            mergeSort(arr, l, m);
            mergeSort(arr, m+1, r);
            merge(arr, l, m, r);
        }
    }
    

    快速排序

    时间复杂度:平均 O(N log N),最坏 O(N²)‌

    int partition(vector<int>& arr, int low, int high) {
        int pivot = arr[high];
        int i = low - 1;
        
        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                swap(arr[i], arr[j]);
            }
        }
        swap(arr[i+1], arr[high]);
        return i + 1;
    }
    
    void quickSort(vector<int>& arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high);
            quickSort(arr, low, pi - 1);
            quickSort(arr, pi + 1, high);
        }
    }
    
    

    特殊排序算法

    桶排序

    时间复杂度:O(N + k)‌

    void bucketSort(vector<float>& arr) {
        int n = arr.size();
        vector<vector<float>> buckets(n);
        
        for (int i = 0; i < n; i++) {
            int bi = n * arr[i];
            buckets[bi].push_back(arr[i]);
        }
        
        for (int i = 0; i < n; i++) {
            sort(buckets[i].begin(), buckets[i].end());
        }
        
        int index = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < buckets[i].size(); j++) {
                arr[index++] = buckets[i][j];
            }
        }
    }
    

    堆排序

    时间复杂度:O(N log N)‌

    void heapify(vector<int>& arr, int n, int i) {
        int largest = i;
        int l = 2*i + 1;
        int r = 2*i + 2;
        
        if (l < n && arr[l] > arr[largest]) largest = l;
        if (r < n && arr[r] > arr[largest]) largest = r;
        
        if (largest != i) {
            swap(arr[i], arr[largest]);
            heapify(arr, n, largest);
        }
    }
    
    void heapSort(vector<int>& arr) {
        int n = arr.size();
        
        for (int i = n/2 - 1; i >= 0; i--) {
            heapify(arr, n, i);
        }
        
        for (int i = n-1; i > 0; i--) {
            swap(arr, arr[i]);
            heapify(arr, i, 0);
        }
    }
    
    

    神秘代码

    神秘小代码·ONE

    #include <iostream>
    #include <random>
    using namespace std;
    char a[3];
    int main() {
    	a[0] = '0';
    	a[1] = '1';
    	a[2] = ' ';
    	random_device rd;
    	mt19937 gen(rd());
    	uniform_int_distribution<int> distribution(0, 2);
    	while (true) {
    		int index = distribution(gen);
    		cout << a[index];
    	}
    	return 0;
    }    
    
    

    神秘小代码·TWO:

    #include <iostream>
    #include <random>
    #include <chrono>
    
    using namespace std;
    
    int main() {
        const int CHARACTER_COUNT = 3;
        char display_symbols[CHARACTER_COUNT] = {'0', '1', ' '};
        
        const int MIN_INDEX = 0;
        const int MAX_INDEX = 2;
    
        unsigned long seed_value = chrono::system_clock::now().time_since_epoch().count();
        mt19937 random_generator(seed_value);
        uniform_int_distribution<int> index_selector(MIN_INDEX, MAX_INDEX);
    
        while (true) {
            int random_position = index_selector(random_generator);
            char selected_character = display_symbols[random_position];
            cout << selected_character;
        }
    
        return 0;
    }
    
  • 通过的题目

  • 最近活动

    This person is lazy and didn't join any contests or homework.
  • 最近编写的题解

    This person is lazy and didn't write any solutions.
  • Stat

  • Rating

题目标签

字符串
3
字典树
3
系统测试
1
图论
1
最小生成树
1