美文网首页
堆排序的实现

堆排序的实现

作者: just_like_you | 来源:发表于2019-07-30 23:24 被阅读0次

使用大顶锥实现升序排序,二叉堆的详细操作见以前的文章


步骤如下:

  • 先构建大顶堆
  • 然后循环删除堆顶元素(交互首尾元素),因为大顶堆的堆顶元素就是最大值
  • 最后得到的就是升序的数组列表
public class HeapSortTest {

    public static void main(String[] args) {
        int[] arr = {32, 32, 12, 3, 4, 5, 12, 1, 4, 6};
        heapSort(arr, arr.length);
        System.out.println(Arrays.toString(arr));
    }


    /**
     * 下沉操作
     */

    public static void downAdjust(int[] arr, int index, int length) {
        int parent = index;
        int child = parent * 2 + 1;
        int tmp = arr[parent];
        while (child < length) {
            //获取两个中间较大的值
            if (child + 1 < length && arr[child + 1] > arr[child]) {
                child++;
            }
            if (tmp >= arr[child]) {
                break;
            }
            arr[parent] = arr[child];
            parent = child;
            child = child * 2 + 1;
        }
        arr[parent] = tmp;
    }


    /**
     * 构建大顶堆,利用非子叶节点依次下沉完成构建
     * @param arr
     */
    public static void buildMaxHeap(int[] arr) {
        for (int i = (arr.length - 2) / 2; i >= 0; i--) {
            downAdjust(arr, i, arr.length);
        }
    }

    public static void heapSort(int[] arr, int length) {
        //构建大顶堆
        buildMaxHeap(arr);
        //交换头尾元素
        for (int i = length - 1; i > 0; i--) {
            int tmp = arr[0];
            arr[0] = arr[i];
            arr[i] = tmp;
            downAdjust(arr, 0, i);
        }
    }
}

相关文章

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序的实现

    用大顶堆实现堆排序

  • 堆排序(非递归版)

    时间复杂度是O(nlogN) 但是不常用堆排序,因为堆排序不稳定 Java实现

  • 14.排序算法(5)

    1.堆排序介绍 2. 代码实现

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • python实现堆排序(HeapSort)

    python实现【堆排序】(HeapSort) 算法原理及介绍 堆排序(Heapsort)是指利用堆这种数据结构所...

  • Javascript和堆排序

    前言 这里以递归为例,参考自慕课网刘波波老师的C++版本实现 普通堆排序(实现了一个完整的堆) 普通的堆排序首先肯...

  • 堆排序的实现

    使用大顶锥实现升序排序,二叉堆的详细操作见以前的文章 步骤如下: 先构建大顶堆 然后循环删除堆顶元素(交互首尾元素...

网友评论

      本文标题:堆排序的实现

      本文链接:https://www.haomeiwen.com/subject/evcarctx.html