美文网首页
堆排序(java)

堆排序(java)

作者: castlet | 来源:发表于2020-05-01 16:29 被阅读0次

将待排序序列构造成一个大顶堆,此时序列的最大值就是堆顶元素,将它和数组的末尾元素交换,再将剩余的n-1个元素构造成大顶堆,如此反复便能得到一个有序序列。时间复杂度为O(nlogn),是不稳定的排序算法。

代码

void heapSort(int[] arr){
    // 先将数组aar构造成一个大顶堆
    for (int i = arr.length / 2; i >= 0; i--) {
        headAdjust(arr, i, arr.length - 1);
    }

    for (int i = arr.length - 1; i >= 1; i--) {
        swap(arr, 0,  i);  // 将对顶数字和数组最后一个数字交换,
        headAdjust(arr, 0,  i - 1); // 将数组的0~i-1个数字重新调整为大顶堆
    }

}
// 已知arr[start~end]中的数字除了arr[start]之外均符合大顶堆的定义
// 调整arr[start]数字,使得arr[start~end]成为一个大顶堆
void headAdjust(int[] arr, int start, int end){
    int tmp = arr[start];
    int j;
    for (j = start * 2 + 1; j <= end; j = j * 2 + 1) {
        if ((j + 1) < end && arr[j] < arr[j + 1]) {
            j ++;
        }
        if (tmp > arr[j]) {
            break;
        }
        arr[start] = arr[j];
        start = j;
    }
    arr[start] = tmp;
}

相关文章

  • 堆排序(非递归版)

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

  • 排序

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

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • java堆排序

    什么是堆排序:图解堆排序堆排序:利用了堆这种数据结构堆数据结构:特殊的完全二叉树,因为具有以下的特点:1)每个结点...

  • 堆排序(java)

    将待排序序列构造成一个大顶堆,此时序列的最大值就是堆顶元素,将它和数组的末尾元素交换,再将剩余的n-1个元素构造成...

  • 堆排序(Java)

    堆排序:堆排序的思想比较难理解,首先将数据看成是一个二叉树,对数据进行二叉树的建立(建堆),这个过程也是排序的过程...

  • 堆排序

    一、堆排序 堆排序是我们所掌握的重要的排序算法之一,理解并使用,可以让我们对它的了解更加深刻: 话不多说上代码 java

  • 堆排序java实现

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

  • 堆排序java代码

    public class HeapSort { }

  • 堆排序(Java版)

    堆排序的原理是先构造一个大顶堆,每次弹出堆中一个最大元素填充到数组倒数第N的位置(逆序),即可将数组由小到大进行排...

网友评论

      本文标题:堆排序(java)

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