`

堆排序

阅读更多
堆排序思路:建立大根堆或小根堆,然后堆顶就是有序的,将堆顶和数组的最后一个元素对调位置,那么最后一个元素就是最大的元素,然后调整堆,将堆顶元素和数组倒数第二个元素对调位置,以此类推,重复,就能得到排序序列了.

实现:
/**
     * 堆排序.
     * 思路:第一步建立大根堆.
     */
    @Test
    public void testHeapSort(){
        int[] arr = {4,2,5,1,2,9,8,3,5,6,2,8};

        // 从最后一个非叶子节点开始进行调整.
        for(int i=arr.length/2-1; i>=0; i--){
            heapAdjust(arr, 0 , arr.length-1);
        }

        for(int i=arr.length-1; i>0; i--){
            Util.swap(i, 0, arr);
            heapAdjust(arr, 0, i-1);
        }
        System.out.println(Arrays.toString(arr));
    }

    private void heapAdjust(int[] arr, int index, int len){
        int temp = arr[index];
        for(int i=2*index+1; i<=len; i=i*2+1){
            if(i+1<len && arr[i]<arr[i+1]) i++;
            if(temp > arr[i]) break;

            arr[index] = arr[i];
            index = i;
        }
        arr[index] = temp;
    }
分享到:
评论

相关推荐

    图解堆排序

    在深入探讨堆排序之前,首先我们要理解堆的概念和顺序存储二叉树的特性。顺序存储二叉树是一种特殊的数组表示的二叉树,通常只考虑完全二叉树,即每一层除了最后一个节点外,其余节点都完全填充。在这种存储方式中,...

    堆排序(C语言实现)

    堆排序(C语言实现)算法思想步骤程序 算法思想 见: 4. 选择排序—堆排序(Heap Sort) 算法导论——堆排序heapsort 步骤 1. 将n个元素建立初始堆,第一个节点放在数组下标1中,因此n个节点对应数组 a[1] ~ a[n],...

    C#堆排序实现方法

    堆排序是一种基于比较的排序算法,它通过构建一个近似完全二叉树的堆结构来实现排序。在C#中,堆排序可以通过以下步骤来实现: 1. **堆的定义**: 堆通常是一个近似完全二叉树的结构,其中每个父节点的值都大于或...

    堆排序 减治法——C++代码

    堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆通常被理解为一个完全二叉树,其中每个父节点的值都大于或等于(大顶堆)或小于或等于(小顶堆)其子节点的值。堆排序算法...

    C++实现堆排序

    1、 实现堆排序算法。 2、 理论分析并实验验证堆排序算法的时间复杂度。

    堆排序算法原理

    ### 堆排序算法原理详解 #### 一、引言 在计算机科学中,排序算法是一种重要的数据处理技术,广泛应用于各种场景。其中,堆排序(Heap Sort)因其高效的性能和稳定性,在实际应用中占据了一席之地。本文将详细介绍...

    堆排序代码

    内部排序之堆排序的具体代码实现,简单同时也易于看懂

    Python实现堆排序的方法详解

    ### Python 实现堆排序的方法详解 #### 一、引言 在计算机科学中,排序算法是一种重要的基础算法,被广泛应用于各种数据处理场景。其中,堆排序作为一种高效的排序方法,因其时间复杂度为 O(nlogn) 而受到青睐。本...

    堆排序.txt堆排序.txt

    堆排序

    datastructures-堆排序

    https://www.geeksforgeeks.org/sorting-algorithms/ 堆排序 堆排序 堆排序 堆排序 堆排序

    堆排序算法

    堆排序

    内部排序之堆排序的实现详解

    堆排序是一种基于比较的内部排序算法,其主要思想是通过构造和操作堆这种数据结构来完成排序。在本文中,我们将深入探讨堆排序的基本概念、实现步骤以及如何解决堆排序过程中遇到的问题。 首先,理解堆的基本概念至...

    java堆排序原理与实现方法分析

    "java堆排序原理与实现方法分析" Java 堆排序是一种基于完全二叉树的排序算法,它可以将数组中的元素排序为递增或递减的顺序。下面将详细介绍 Java 堆排序的原理与实现方法。 堆排序原理 堆是一个数组,被看成一...

    C++堆排序C++堆排序.zip

    **C++堆排序详解** 堆排序是一种基于比较的排序算法,它的主要思想是利用数据结构中的堆特性来实现数组或序列的排序。在C++中,我们可以通过标准库中的`&lt;algorithm&gt;`头文件来实现堆排序,但更深入的理解和自定义...

    C语言数据结构之堆排序源代码

    堆排序是一种高效的排序算法,它的基本思想源自于数据结构中的“堆”这一概念。在C语言中实现堆排序,主要涉及两个关键操作:构建大顶堆(或小顶堆)和堆调整。堆排序的时间复杂度为O(n*logn),在平均和最坏情况下都...

Global site tag (gtag.js) - Google Analytics