zoukankan      html  css  js  c++  java
  • 堆排序个人理解

    将数组看做是完全二叉树进行设计,比较通过比较孩子节点和父节点的值,构造大顶堆。将大顶堆中顶部的值与最小的值进行交换。然后继续构造大顶堆,依次类推,直到完成排序

      其算法如下:


           /**
    * 以parent为父节点进行比较,构建部分大顶堆,只要出现父节点比子节点都大,就结束。 * @param a * @param parent * @param length */
              private static void createDaDingDui(int[] a, int parent, int length) {
                    // tempParent:临时变量用于保存父节点
                    int tempParent;
                    //child:临时变量用于保存最大孩子节点
                    int child;
                    for (tempParent = a[parent]; 2*parent+1 <= length; parent = child) {
                        child=2 * parent + 1;
                        // 如果左孩子节点小于右孩子节点,将右孩子节点给最大孩子节点
                        if (child < length && a[child] <= a[child+1]) {
                            child++;
                        }
                        // 如果父节点小于最大孩子节点,将最大孩子节点的值与父节点进行交换。否则直接跳出本次循环
                        if (tempParent < a[child]) {
                            a[parent] = a[child];
                        } else {
                            break;
                        }
                    }
                    a[parent] = tempParent;
                }
        
                public static void duiSort(int[] array){
                    
                    //构建大顶堆。先构建大顶堆,以下标为array.length/2-1出的值为父节点,
                    //依次向上进行比较构建大顶堆。以后再比较时,每必要从下往上在进行比较一次,等于优化作用。
                    for (int i = array.length / 2-1; i >= 0; i--) {
                        createDaDingDui(array, i, array.length - 1);
                       }
                    //将大顶堆顶部值与最后一个值进行交换。在重新找构造大顶堆,因为该大顶堆只有
                    //最上一个数据最小,所以依次与其子节点进行比较,交换值,构建新的大顶堆。
                    for(int i=array.length-1;i>=0;i--){
                        int temp=array[0];
                        array[0]=array[i];
                        array[i]=temp;
                        createDaDingDui(array, 0, i-1);
                    }
                    
                }
  • 相关阅读:
    go 字符串转换
    GRU模型结构
    ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解
    H5可视化编辑器(H5 Dooring)
    (转)如何防止Axios对我的请求参数进行编码?
    vue使用element-ui,如何给Label加标签
    vue中$router.push打开新窗口
    (转)webstorm配置svn
    打开gitee.com网站报错
    监控$route无效
  • 原文地址:https://www.cnblogs.com/orchid9/p/7615625.html
Copyright © 2011-2022 走看看