栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

八大排序之堆排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

八大排序之堆排序

package dataStruct.排序算法;

import java.util.Arrays;


public class 堆排序 {
    public static void main(String[] args) {
        int temp = 0;
        int[] arr= {4,6,8,5,9};
        for (int i = arr.length/2-1; i >= 0 ; i-- ) {
            adjustSort(arr,i,arr.length);
        }
        for (int i = arr.length -1; i > 0 ; i--) {
            temp = arr[i];
            arr[i] = arr[0];
            arr[0] = temp;
            adjustSort(arr,0,i);
        }
        System.out.println(Arrays.toString(arr));
    }
    //堆排序的算法
    public static void heapSort(int[] arr){

    }
    //调整算法

    
    public static void adjustSort(int[] arr,int i,int length){
        int k = 2 * i + 1;//i为非叶子节点,k为非叶子节点的左节点。k+1是右节点
        for (; k < length; k = k*2+1) {
            //数组的每一个非叶子节点为2*i-1;
            //非叶子节点的个数为:arr.length/2+1;
            //1.判断他的非叶子节点和子节点的大小关系
            int temp = 0;
            if (k+1 < length && arr[k] < arr[k+1]){
                k++;//比较i的两个子节点的大小,如果右节点大,k++
            }
            //比较arr[i]和arr[k]的大小,如果arr[k]>arr[i],则交换这个的位置
            if (arr[k] > arr[i]){
                temp = arr[i];
                arr[i] = arr[k];
                arr[k] = temp;
                //交换完成后,将i的位置编程k,因为下一次比较的时候,
                i = k;
            }else {
                break;
            }

        }
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694706.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号