堆排序

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;
堆排序的平均时间复杂度为 Ο(nlogn)。

  1. 算法步骤
  • 创建一个堆 H[0……n-1];

  • 把堆首(最大值)和堆尾互换;

  • 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;

  • 重复步骤 2,直到堆的尺寸为 1。

  1. 动图演示


    image
package sorted;

import java.util.Arrays;

public class HeapSort {
    public static void main(String[] args) {
        int[] array = {1,999,888,777,6,5,7,3,2,9};
        heapSort(array);
        System.out.println(Arrays.toString(array));
    }
    private static void heapSort(int[] array){
        int temp;
        for(int i= (array.length-1)/2;i>=0;i--){
            adjust(array,i, array.length);
        }
        for(int j= array.length-1;j>0;j--){
            temp = array[j];
            array[j] = array[0];
            array[0] = temp;
            adjust(array,0,j);
        }
    }
    private static void adjust(int[] array, int index, int length){
        int value = array[index];
        for(int i= 2 * index + 1;i<length;i = (2*i)+1){
            if (i + 1 < length && array[i] < array[i + 1]) {
                i++;
            }
            if(array[i]>value){
                array[index] =  array[i];
                index = i;
                System.out.println(value);
            }
            else {
                break;
            }
        }
        array[index] = value;

    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 堆排序 小序:什么是堆? 先了解一下什么是堆,堆是计算机科学中的一种特别的树状数据结构,堆总是一棵完全二叉树,它总...
    疯狂1024阅读 604评论 0 1
  • 小序:什么是堆? 先了解一下什么是堆,堆是计算机科学中的一种特别的树状数据结构,堆总是一棵完全二叉树,它总...
    疯狂1024阅读 275评论 0 1
  • 小序:什么是堆? 先了解一下什么是堆,堆是计算机科学中的一种特别的树状数据结构,堆总是一棵完全二叉树,它总是满足下...
    疯狂1024阅读 563评论 0 2
  • 堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同...
    besmallw阅读 368评论 0 0
  • 堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同...
    Jackpot_0213阅读 222评论 0 0

友情链接更多精彩内容