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

Java实现基于数组的堆排序(代码)

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

Java实现基于数组的堆排序(代码)

public class heapSort {
    
    public static void main(String[] args) {
        int[] nums = {53,86,12,47,63,92,15,8};
        heapBuild(nums,nums.length);        // 建立大根堆
        for (int i = 0; i < nums.length; i++) {
            swap(nums,0,nums.length-i-1);       // 将第一个元素(最大元素)与最后一个元素交换
            heapBuilfy(nums,0,nums.length-i-1);     // 重新堆化
        }
    }

    // 以数组nums为基准建立一个大根堆,size为从下标0开始的个数
    public static void heapBuild(int[] nums,int size){
        for (int i = size/2; i >= 0; i--) {
            heapBuilfy(nums,i,size);
        }
    }

    // 堆化,index为要处理的数的下标,size表示长度
    public static void heapBuilfy(int[] nums,int index,int size){

        int left = index * 2 + 1;       // 左节点
        int right = index * 2 + 2;      // 右节点
        int max = index;                // 用于记录值最大的节点,初始赋值为index
        if(left < size && nums[left] > nums[max]){       // 左节点大于根节点,用max记录
            max = left;
        }
        if(right < size && nums[right] > nums[max]){     // 右节点大于根节点,用max记录
            max = right;
        }
        if(index != max){       // 交换过节点,递归下一层
            swap(nums,max,index);
            heapBuilfy(nums,max,size);
        }
    }

    // 交换,交换nums数组的下标为a和b的元素
    public static void swap(int[] nums,int a,int b){
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    }
}

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

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

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