Sorting Algorithm

堆排序

#include <iostream>
using namespace std;
const int maxn = 100010;
int a1[maxn];
int n,m;
void g(int lo,int len) {
    int  tmp = a1[lo];
    int h = lo;
    int k=lo*2;
    while(k<=len) {
        if(k+1<=len&&a1[k+1]>a1[k]) k++;
        if(tmp>a1[k]) break;
        a1[h] = a1[k];
        h = k;
        k = h*2;
    }
    a1[h]= tmp;
}


void f() {
    for (int i=n/2;i>=1;i--) {
        g(i,n);
    }
    for (int i=1;i<n;i++) {
        swap(a1[1],a1[n+1-i]);
        g(1,n-i);
    }
}
int main() {
while(cin>>n>>m&&!(n==0&&m==0)) {
    for (int i=1;i<=n;i++) cin>>a1[i];
    f();
    for (int i=1;i<=n;i=i+m) {
    cout<<a1[i];
    if(i+m<=n)
    cout<<" ";  }
    cout<<endl;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章