zoukankan      html  css  js  c++  java
  • 堆排序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;
    }

  • 相关阅读:
    换行的展示
    jsp页面的导出功能
    怎么设置回车键为提交功能?
    HBuilder使用心得
    js和jQuery
    前端常用技术总结--java程序员
    对压缩文件加密
    删除表中一个字段的SQL语句
    用NPOI操作EXCEL-锁定列CreateFreezePane()
    MVC 点击下载文档
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2758019.html
Copyright © 2011-2022 走看看