• 算法笔记 --- Scale Sort


    #include <iostream>
    #include <vector>
    using namespace std;
    
    class ScaleSort {
    public:
        vector<int> sortElement(vector<int> A, int n, int k) {
            if(n == 1){
                return A;
            }
            int tmp[k];
            for(int i = 0; i < k; i++){
                tmp[i] = A[i];
            }
            buildMinHeap(tmp, k);
            for(int i = 0; i < n-k; i++){
                A[i] = tmp[0];
                tmp[0] = A[i+k];
                adjustMinHeap(tmp, 0, k);
            }
            for(int i = n-k; i < n; i++){
                A[i] = tmp[0];
                tmp[0] = tmp[--k];
                adjustMinHeap(tmp, 0, k);
            }
            return A;
        }
        void adjustMinHeap(int* A, int index_node, int size){
            int var_min = index_node;
            int left_child = index_node*2+1;
            int right_child = index_node*2+2;
            int tmp;
            // cout<<"left_child: "<<left_child<<endl;
            // cout<<"right_child: "<<right_child<<endl;
            // cout<<"var_min: "<<var_min<<endl;
            if(A[left_child] < A[var_min] && left_child < size){
                var_min = left_child;
            }
            if(A[right_child] < A[var_min] && right_child < size){
                var_min = right_child;
            }
            if(var_min != index_node){
                tmp = A[index_node];
                A[index_node] = A[var_min];
                A[var_min] = tmp;
                
                adjustMinHeap(A, var_min, size);
            }
        }
        void buildMinHeap(int* A, int size){
            for(int i = (size/2-1); i >= 0; i--){
                // cout<<"i: "<<i<<endl;
                adjustMinHeap(A, i, size);
            }
        }
    };
    
    int main()
    {
        vector<int> a;
        //{2,1,4,3,6,5,8,7,10,9}
        a.push_back(2), a.push_back(1), a.push_back(4), a.push_back(3), a.push_back(6);
        a.push_back(5), a.push_back(8), a.push_back(7), a.push_back(10), a.push_back(9);
        ScaleSort sorter;
        vector<int> res = sorter.sortElement(a, 10, 2);
        cout<<"result: "<<endl;
        for(int i = 0; i < res.size(); i++)
            cout<<res.at(i)<<" ";
        cout<<endl;
        
       return 0;
    }
  • 相关阅读:
    HTML5和CSS3基础教程(第8版)-读书笔记(3)
    HTML5和CSS3基础教程(第8版)-读书笔记(2)
    HTML5和CSS3基础教程(第8版)-读书笔记
    JavaScript高级程序设计-读书笔记(7)
    HTTP状态码列表
    vue 监听对象里的特定数据
    vue 项目中命名方法
    一些常用文件夹和类的一些命名
    点将产品前端架构重构
    常用正则表达式总结
  • 原文地址:https://www.cnblogs.com/zhongzhiqiang/p/5791471.html
Copyright © 2020-2023  润新知