堆排序

本文介绍了一个使用Java实现的堆排序算法示例。该算法通过构建最小堆并进行下沉操作来对整型数组进行排序。文章提供了完整的代码示例,并展示了排序后的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public classMain {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int test[] ={0,-1,78,22,45,-100};

        HeapSort(test);

        for(int i = 0;i<test.length;i++){

          

           System.out.println(test[i]);

        }

    }

   

    public static void HeapSort(int values[]){

       

        for( int i = values.length/2 -1;i>=0;i--){

           MinHeapFiexDown(values,i,values.length);

        }

        for( int i = values.length -1 ;i >=1 ;i--){

           Swap(values,i,0);

           MinHeapFiexDown(values,0,i);

        }

    }

    // i节点开始调整,n为节点总数,0开始计算i节点的子节点为:2*i+1,2*i+2

    @SuppressWarnings("unused")

    private static void MinHeapFiexDown(int a[],int i,int n){

       

        int j,temp;

        temp = a[i];

        j = 2*i+1;

        while(j < n){

          

           // 在左右孩子中获取最小的

           if(j + 1 < n  && a[j + 1] < a[j]) j++;

           if(a[j] >= temp) break;

          

           a[i] = a[j];

           i = j;

           j = 2 * i + 1;

        }

        a[i] = temp;

    }

    @SuppressWarnings("unused")

    private static void Swap(int values[],int aIdx,int bIdx){

       

        int temp = values[aIdx];

        values[aIdx] = values[bIdx];

        values[bIdx]  = temp;

    }

}

//输出结果:

78

45

22

0

-1

-100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值