java习题:建堆

本文详细探讨了Java中如何实现堆数据结构,通过实例解析建堆的过程,包括最大堆与最小堆的构建,以及堆排序算法的应用。旨在帮助读者深入理解堆的原理和操作技巧。
摘要由CSDN通过智能技术生成
public class Heaps {

    //前提:除了要调整的位置,其他位置已经满足堆的性质

    //index要调整的位置

    //array被看作堆的数组

    //size数组中被看作堆的值





    //向下调整,大堆(除了index和它的孩子外,其他位置已经满足堆性质了)

    public static void heapify(int[] array,int size,int index){

        while(true){

            int left=index*2+1;

            if(left>=size){

                return;

            }

            int max=left;

            if(left+1<size){

                if(array[max]<array[left+1]){

                    max=left+1;

                }

            }

            if(array[max]>array[index]){

                swap(array,index,max);

                index=max;

            }

            else{

                return;

            }

        }

    }

    //交换数组两个元素

    public static void swap(int[] array,int i,int j){

        int t=array[i];

        array[i]=array[j];

        array[j]=t;

    }

    //建堆(任意数组转化成大堆)

    public static void creatHeap(int[] array,int size){

        for(int i=(size-2)/2;i>=0;i--){

            heapify(array,size,i);

        }

    }

    //向上调整(大堆)

    public static void adjustUp(int[] array,int index){

        while(true) {

            if(index==0){

                return;

            }

            int i = (index - 2) / 2;

            if (array[i] < array[index]) {

                swap(array, i, index);

                index = i;

            }else {

                return;

            }

        }



    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值