算法笔记 --- 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;
}

 

posted @ 2016-08-20 23:01  zhongzhiqiangZz  阅读(178)  评论(0编辑  收藏  举报