Sorting Algorithm

本文介绍了一种堆排序算法的具体实现过程。通过调整数组元素形成最大堆,并将堆顶元素与末尾元素交换的方式逐步完成排序。该算法适用于整数数组的排序任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆排序

#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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值