美文网首页
Java 实现 堆排序

Java 实现 堆排序

作者: _VITA | 来源:发表于2018-07-15 23:55 被阅读0次

关键点

  • 平衡二叉树;
  • 任意父节点都大于(小于)子节点;
  • 用数组来储存。(父节点为arr[i],则左节点arr[i<<1+1],右节点arr[i<<1+2];)

思路:
1:构建最大顶堆;
2:取出最大顶的“顶”,调整堆;


public class ArrayHeap  {
    
    private void initHeap(int[] arr,int length) {
        if (arr==null||arr.length==0) {
            return;
        }
        int num = length/2-1;
         
        for( ;num>=0;num--){
            adjustHeap(arr, num, length);
        }
        
    }
    private void adjustHeap(int[] arr, int index,int length) {
        if (arr==null||arr.length==0||index<0||index>length||lastIndex<0||length>arr.length) {
            return;
        }
                int temp = arr[num];
        while (2*index+1<=length) {
            int left = index<<1+1;
            int right = left+1;
            int maxsonindex = right<=length?arr[left]>arr[right]?left:right:left;
            if (arr[index]<arr[maxsonindex]) {
                swap(arr[index], arr[maxsonindex]);
            }
            index+=index;
        }
        
    }
    private void swap(int a,int b) {
         a = a + b;
         b = a - b;
         a = a - b;
        
    }
    public void heapSort(int[] arr) {
        if (arr==null||arr.length==0) {
            return;
        }
        int length = arr.length;
        initHeap(arr,length);
        
        for(int i = 0;i<length-1;i++){
            swap(arr[0], arr[length-1-i]);
            adjustHeap(arr, 0, length--);
        }
        
    }
}


相关文章

  • 排序

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

  • 堆排序(非递归版)

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

  • 堆排序java实现

    //堆排序://基本思想://首先要了解堆这种数据结构://堆是实质上是一个满足如下条件的完全二叉树:树中任意非叶...

  • Java 实现 堆排序

    关键点 : 平衡二叉树; 任意父节点都大于(小于)子节点; 用数组来储存。(父节点为arr[i],则左节点arr[...

  • 堆排序(java实现)

    一、前言 堆是一个数组,它可以看成近似的完全二叉树。表示堆的数组包括两个属性:A.length数组元素的个数,A....

  • 堆排序(Java实现)

    封装成类: 测试: 输出:[-1, 9, 0, 6, 5, 8, 2, 1, 7, 4, 3][-1, 0, 1,...

  • 堆排序算法(Java实现)

    原始堆如下: 堆排序算法 构造初始堆,从最后一个非叶节点开始调整选出叶子节点中比自己大的一个交换,如果交换后的叶子...

  • JS实现堆排序

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

  • 堆排序---基础篇

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

  • 堆排序

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

网友评论

      本文标题:Java 实现 堆排序

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