美文网首页
堆排序分析

堆排序分析

作者: HannahLi_9f1c | 来源:发表于2020-05-03 23:04 被阅读0次

堆排序在之前头条三面的时候问过,之前出于侥幸心理没有认真掌握,现在不得不认真学习下了~

什么是堆排序

可以用下面动图生动形象地描述堆排序的过程。

image
  1. 将数组映射到一颗二叉树。
  2. 构造初始化堆,从底部非叶子节点出发,将叶子结点中值较大的数换到当前结点,并且不断往下获取更大的值。如果当前结点的值已经比左右结点更大,那么不用再往下了,因为下面的结点之前已经调整成结点大于左右结点。初始化后的堆每个每个结点比左右结点更大。
  3. 将调整好的堆的根结点换到数组末尾处,再把交换后子数组调整成大顶堆。陆续再换到后面。最后就能实现从小到大的排序。

实现代码

private void heapSort(int[] nums) {
        int len = nums.length;
        for(int i=len/2-1;i>=0;i--) {
            adjustHeap(nums, i, len);
        }
        for(int i =0; i < len; i++) {
            swap(nums, 0, len-i-1);
            adjustHeap(nums, 0, len-i-1);
        }
    }
    private void swap(int[]nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
    private void adjustHeap(int[]nums, int start, int len) {
        int tmp = nums[start];
        for(int i = start*2+1; i<len; i*=2) {
            if(i+1<len && nums[i+1]>nums[i]) {
                i++;
            }
            if(tmp >= nums[i]) {
                break;
            } else {
                nums[start] = nums[i];
                start = i;
            }
        }
        nums[start] = tmp;
    }

待更

复杂度分析

画图描述过程

image.png
image.png
image.png
image.png
image.png
image.png
image.png

相关文章

  • 堆排序---基础篇

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

  • C语言算法

    1.fabnaci数列算法 2、交换两个数的值 3、堆排序 堆排序复杂度分析: 堆排序运行时间主要是消耗在初始构建...

  • 堆排序分析

    堆排序在之前头条三面的时候问过,之前出于侥幸心理没有认真掌握,现在不得不认真学习下了~ 什么是堆排序 可以用下面动...

  • 堆排序原理以及代码解析

    前言 堆排序是排序算法的一种,相对来说较难理解,本文分析了堆排序的原理,并且剖析了源码。 堆定义 堆是具有以下性质...

  • 【算法】排序(六)堆排序

    正文之前 这一篇文章介绍一下堆的概念,以及堆排序 基本概念、最大/最小堆堆排序分析 正文 1. 什么是堆 堆不是单...

  • 堆排序

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

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • 堆排序的理解分析

    面试的时候总是不免在数据结构方面会遇到堆排序的问题,相信很多人都只是知道冒泡排序,插入排序这种简单的,更甚者还知道...

  • JS实现堆排序

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

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

网友评论

      本文标题:堆排序分析

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