• 堆排序C语言


    #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;
    }

  • 相关阅读:
    Tesseract-OCR
    chrome浏览器插件推荐
    安装配置sublime Text 3 快捷键方式
    远程桌面与远程控制
    一个C#的XML数据库访问类
    WPF小程序:贪吃蛇
    恐惧源于一知半解
    8条佛曰 66句禅语
    自动开机 双网卡网络唤醒
    C#,Java,C++中的finally关键字
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2758019.html
Copyright © 2020-2023  润新知