[数据结构与算法]——堆排序及按顺序排序

堆排序:
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。
点击这里查看详情
知识点:封装函数;堆的排序;
注意事项: int start = (arr.length-x)/2; x=1,2结果一样,最终取得都是倒数第二层的同一个节点;其他见代码注释部分;
写作纯属个人兴趣,如有错误请批评指正!

package Java01;

import java.util.Arrays;

public class HeapSort {
    //主函数入口
    public static void main(String[] args){

        int[] arr = new int[] {10,78,9,68,0,17,8,48,2,33};
        heapSort(arr);
        System.out.println(Arrays.toString(arr));
    }
    //多次调用maxHeap,取出第一个值,也就是最大值,放置最后
    public static void heapSort(int[] arr){
        //定义开始位置,最后一个非叶子节点
        int start = (arr.length-1)/2;
        //调整为大顶锥
        for(int i=start;i>=0;i--){
            maxHeap(arr, arr.length, i );

        }
        
       for(int i = arr.length-1;i>0;i--){
            int temp = arr[0];
            arr[0]=arr[i];
            arr[i]=temp;
            maxHeap(arr,i,0);
       }

    }
    // 参数主要有 数组,数组长度,索引
    public static void maxHeap(int[] arr,int size,int index){
        //左子节点
        int leftNode = 2*index + 1;
        //右子节点
        int rightNode = 2*index + 2;
        //暂且默认该节点为最大值,与自己的左右节点进行比较
        int max = index;
        if(size>leftNode&&arr[leftNode]>arr[max]){
            max = leftNode;
        }
        if(size>rightNode&&arr[rightNode]>arr[max]){
            max = rightNode;
        }
        //此处若发生交换,必定破坏了原有堆的结构,需要调整
        if(max!=index) {
            int temp=arr[index];
            arr[index]=arr[max];
            arr[max]=temp;
            //调整,此时的max指向左节点或者右节点
            maxHeap(arr,size,max);

        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值