您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java数据结构和算法——堆排序

小志的博客 发布时间:2020-09-08 22:57:30 ,浏览量:0

目录
    • 一、堆排序基本介绍
    • 二、堆排序基本思想
    • 三、堆排序思路图解
    • 四、堆排序示例要求
    • 五、堆排序示例代码
    • 六、测试堆排序所消耗时间的代码示例

一、堆排序基本介绍
  • 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。
  • 堆是具有以下性质的完全二叉树。每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。
  • 大顶堆图解如下: 在这里插入图片描述
  • 大顶堆特点:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] // i 对应第几个节点,i从0开始编号。
  • 小顶堆图解如下: 在这里插入图片描述
  • 小顶堆特点:arr[i] 0; j--) { //交换 temp = arr[j]; arr[j] = arr[0]; arr[0] = temp; adjustHeap(arr, 0, j); } System.out.println("堆排序中排序成小顶堆的输出结果:"+Arrays.toString(arr)); } /** * @Description: 将一个数组(二叉树), 调整成一个大顶堆 * @Param: arr 待调整的数组 * i 表示非叶子结点在数组中索引 * lenght 表示对多少个元素继续调整,length是在逐渐的减少 * @Author: xz * @Date: 2020/9/8 22:25 */ public static void adjustHeap(int arr[], int i, int lenght) { //先取出当前元素的值,保存在临时变量 int temp=arr[i]; //k = i * 2 + 1 其中k 是i结点的左子结点 //k = k * 2 +1 其中k是左子节点的下一个左子节点 for(int k = i * 2 + 1;k
关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0437s