博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序C语言
阅读量:6675 次
发布时间:2019-06-25

本文共 1002 字,大约阅读时间需要 3 分钟。

#include <stdio.h>

/*遍历*/
void tranvase(int * arr, int len){
    int i;
    for(i=1; i<=len; i++){
        printf("%d、", arr[i]);
    }
    printf("\n");
}
/*调整堆*/
void tiaozhengdui(int * arr, int root, int end){ //root 为根坐标 end为最后元素坐标
    int j;
    j = 2*root; //root的左子树
    int temp = arr[root]; //临时保存根节点值
    /*比较左子树值和右子树值*/
    if((j+1)<=end && arr[j]<arr[j+1]){
        j=j+1;
    }
    //j 指向子树最大值的位置
    // 继续比较 该最大值 和 它的 子树值进行比较
    while(j<=end){
        if(temp<arr[j]){ //根节点值<子树最大值  互换值
                arr[root] = arr[j];
                root = j;
                j = 2*j;
                 /*比较左子树值和右子树值*/
                if((j+1)<=end && arr[j]<arr[j+1]){
                    j=j+1;
                }
        }else{
            j = end+1; //退出
        }
    }
    arr[root] = temp;
}
/*堆排序*/
void stackSort(int * arr, int len){
        int i,j,temp;
        //初始化堆
        for(i=len/2; i>=1; i--){
            tiaozhengdui(arr, i, len);
        }
        /*换根和最后元素的值*/
        for(j=len; j>=2; j--){
             temp = arr[1]; //临时存储根节点最大值
             arr[1] = arr[len]; //根节点保存最后一个结点的值
             arr[len]=temp; //最后一个结点保存最大值
             len = len-1;
             tiaozhengdui(arr, 1, len); //继续调整堆
    }
}
int main(){
    int arr[10] = { 0, 12, 1, 33, 23, 23, 4, 2, 445, 2};
    tranvase(arr, 9);
    stackSort(arr, 9);
    tranvase(arr, 9);
    return 0;
}

转载地址:http://mprxo.baihongyu.com/

你可能感兴趣的文章
23张非常精美的圣诞桌面壁纸分享
查看>>
稀疏矩阵的压缩存储和转置
查看>>
华为S5700交换机开启WEB配置
查看>>
mysql主从同步错误解决和Slave_IO_Running: NO
查看>>
Coding and Paper Letter(十七)
查看>>
性能下降曲线
查看>>
求一个数的二进制中1的个数
查看>>
古代教育观点纵览
查看>>
Linux 下搭建PHP环境(make方法)太麻烦了
查看>>
《三》kubectl命令行管理工具、YAML配置详解
查看>>
iozone测试文件系统性能
查看>>
Hadoop - HDFS的数据流剖析
查看>>
Win7下部署asp.net程序如果有RDLC报表需要以下配置
查看>>
Jhipster_cn中文翻译组
查看>>
Nagios简介与安装(1)
查看>>
centos 本地yum配置
查看>>
使用Vundle来管理vim的插件
查看>>
我们容易忽略的WebDriver 的一些方法
查看>>
Windows借助脚本实现自动化加域
查看>>
构造函数私有化
查看>>