堆排序—Java实现

堆排序———Java实现

堆排序步骤:

  1. 创建堆
  2. 将堆顶元素与数组最后一个元素进行交换并调整堆
//堆排序
public void HeapSort(int a[]){
    //创建大顶堆
        for (int i = a.length/2-1; i>=0; i--) {
            adjust(a,i,a.length);
        }

        //将堆顶元素与最后一个节点交换并调整堆
        for (int j = a.length-1; j >0 ; j--) {
            swap(a,0,j);
            adjust(a,0,j);

        }
    }



    //调整堆
    public void  adjust(int a[],int i,int length){
        int tmp=a[i];
        for (int k = 2*i+1; k <length; k=2*k+1) {//找出左右孩子中最大值
            if (k+1<length && a[k]<a[k+1]){
                k++;
            }
            if (a[k]>tmp){//将左右孩子最大值大于父节点,需交换值
                a[i]=a[k];
                i=k;
            }
            else break;//说明此时没发生调整,跳出循环
        }
        a[i]=tmp;//若发生交换,将最开始的父节点的值交换给最后一个交换的位置;若未发生交换,将原值赋回去
    }

    public void swap(int[] a,int i,int j ){//交换函数
        int temp=a[i];
        a[i]=a[j];
        a[j]=temp;

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值