c实现数据结构中堆排序

#include <stdio.h>
void print(int k[],int n);
void heap_sort(int k[],int n);
void adjust(int k[],int i,int n);
int main(){
    int K[]= {49,38,97,76,65,13,27,50};
    heap_sort(K,7);
    print(K,8);
}
void print(int k[],int n){
    for (int i=0;i<n;i++){
        printf("%d\n",k[i]);
    }
}
//堆排序
void heap_sort(int k[],int n){
    int i;
    int temp;
    //建立初始堆
    for(i=n/2;i>=1;i--){
        adjust(k,i,n);
    }
    for(i=n-1;i>=1;i--){
        temp = k[i+1];
        k[i+1]=k[1];
        k[1]=temp;
        adjust(k,1,i);
    }
}
void adjust(int k[],int i,int n){
    int j;
    int temp;
    temp = k[i];
    j=2*i;
    while(j<=n){
        if(j<n&&k[j]<k[j+1]){
            j++;
        }
        if(temp>=k[j]){
            break;
        }
        k[j/2]=k[j];
        j=j*2;
    }
    k[j/2]=temp;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值