#include <iostream>
#include<algorithm>
#include <vector>
using namespace std ;
class ScaleSort {
public :
int * sortElement(int * A, int n, int k) {
vector <int > B(k);
int i, j;
for (i = 0 ; i<k; i++)
B[i] = A[i];
minheap(B, k);
for (i = 0 ; i<n - k; i++)
{
A[i] = B[0 ];
B[0 ] = A[i + k];
shiftdown(B, 0 , k);
}
for (j = n - k; j<n; j++)
{
A[j] = B[0 ];
cout << j << ":" << A[j] << endl;
if (j == n - 1 )
break ;
B[0 ] = B[--k];
shiftdown(B, 0 , k);
}
return A;
}
void minheap(vector <int > &a, int n){
int i = n / 2 - 1 ;
for (i; i >= 0 ; i--){
shiftdown(a, i, n);
}
}
void shiftdown(vector <int > &a, int i, int n){
int j = 0 ;
int flag = 1 ;
while (i * 2 + 1 <n && flag){
if (i * 2 + 2 < n && a[i * 2 + 2 ] < a[i * 2 + 1 ])
j = i * 2 + 2 ;
else
j = i * 2 + 1 ;
if (a[i] > a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i = j;
}
else
flag = 0 ;
}
}
};
int main(int argc, char *argv[])
{
int a[] = { 1 , 2 , 4 , 3 , 6 , 5 , 8 , 7 , 10 , 9 };
int size;
ScaleSort* hs = new ScaleSort();
int * resu = hs->sortElement(a,10 ,2 );
int i;
for (i = 0 ; i < 10 ; i++)
cout << resu[i] << " " ;
cout << endl;
system("pause" );
return 0 ;
}