Skip to content

20231119 - 排序02

筒排序

  • 若需排序的数据在一个可定范围内 (尽量别太大, 一般只能排序整数), 我们可以用 数组 index 和数量一一对应, 可将各元素放入对应 index 后按序输出各数值方可得到有序数列
  • 缺点: 内存消耗异常大, 兼容性不佳
  • 优点: 如果各数据差值大, 排序速度较 冒泡排序 会快很多
  • 实现 (屎山)
    cpp
    /*
      不支持负数
      要支持可以在比较前加上 abs(0-<min>) (min 为所给数据最小值, min <= 0)
    */
    #include <iostream>
    #include <climits>
    
    using namespace std;
    
    int get_max(int array[], int length) {
        int _max = INT_MIN;
        for (int i=0; i < length; i++) {
            if (array[i] > _max) {
                _max = array[i];
            }
        }
        
        return _max;
    }
    
    int main() {
        int n;
        cin >> n;
        int array[n];
        for (int i=0; i < n; i++) {
            cin >> array[i];
        }
        
        // 主要部分
        const int MAX_LENGTH = get_max(array, n);
        int barrels[MAX_LENGTH];
        // 全部初始化为 0
        for (int i=0; i < MAX_LENGTH; i++) {
            barrels[i] = 0;
        }
    
        for (int i=0; i < n; i++) {
            barrels[array[i]-1] = array[i];
        }
    
        // 输出
        for (int i=0; i < MAX_LENGTH; i++) {
            int item = barrels[i];
            if (item) {
                cout << item << ", ";
            }
        }
    }