zoukankan      html  css  js  c++  java
  • 堆排序

     /**
         * 首先将无序序列构建成大顶堆或小顶对(父节点大于等于左右字节点的值)
         * arr[i]>=arr[2i+1] && arr[i]>=arr[2i+2]
         * 交换堆顶和末尾元素的值,重新调整堆结构
         * 交换数据,重复上面的步骤
         *
         * 第一个非叶子节点时(arr.length/2)-1
         *
         *
         */
        @Test
        public void headSort(){
            int[] array = {1,4,5,6,9,0,4,3,4,5};
            headSort(array);
            System.out.println(Arrays.toString(array));
    
    
        }
    
        public void headSort(int[] array){
            //构建大堆顶
            for (int i=(array.length)/2-1;i>=0;i--){
                //从第一个非叶子节点开始,从左到右,从下到上
                ajustHead(array,i,array.length);
            }
    
            for (int j=array.length-1;j>0;j--){
                swap(array,0,j);
                ajustHead(array,0,j);
            }
    
        }
    
        public void ajustHead(int[] array,int i,int length){
            int tem=array[i];
            for (int k=i*2+1;k<length;k=k*2+1){
                if(k+1<length && array[k]<array[k+1]){//左右子树比较
                    k++;
                }
                if(array[k]>tem){
                    array[i]=array[k];
                    i=k;
                }else{
                    break;
                }
    
            }
            array[i]=tem;
        }
    
        public void swap(int[] array ,int a,int b){
            int temp=array[a];
            array[a]=array[b];
            array[b]=temp;
    
        }
    View Code

    堆排序实践

  • 相关阅读:
    百度新闻
    Android平台搭建
    9911微博客
    Python基础语法
    虚拟机上CentOS6.9x86_64系统安装教程
    虚拟机下Linux网络配置
    Win2008 Server配置PHP环境
    Win2008 Server下配置安装IIS
    我的第一篇博文
    WCF学习第一晚:基本知识的了解
  • 原文地址:https://www.cnblogs.com/nihaofenghao/p/9093150.html
Copyright © 2011-2022 走看看