算法之堆排序
发布日期:2021-05-14 16:28:59 浏览次数:23 分类:精选文章

本文共 2550 字,大约阅读时间需要 8 分钟。

���������

���������������

������������Heapsort���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������O(n log n)���������������������������������������������������

������������

���������������������������������������

  • ���������������������������������������������������������������������������
  • ���������������������������������������������������������������������������
  • ���������������������������������������������������������������������������������������2*i + 1������������������2*i + 2���������������������������i���������������������������

    ������������

  • ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

  • ���������������

    • ���������������������������������������������������������������������������
    • ���������������������������
    • ���������������������������������������������������������������������������������������������������������������������
  • ������������������

    static void sort(int[] nums) {
    int n = nums.length;
    // ���������������������
    MaxHeap(nums, n);
    // ������������������������������������
    for (int i = n-1; i >= 0; i--) {
    swap(nums, 0, i);
    // ������������������������������������������������
    MaxHeapFixedDown(nums, 0, i);
    }
    }
    static void swap(int[] nums, int p, int r) {
    int temp = nums[p];
    nums[p] = nums[r];
    nums[r] = temp;
    }
    static void MaxHeap(int[] nums, int n) {
    for (int i = n/2-1; i >= 0; i--) {
    MaxHeapFixedDown(nums, i, n);
    }
    }
    static void MaxHeapFixedDown(int[] nums, int i, int n) {
    int left = 2*i + 1;
    int right = 2*i + 2;
    if (left >= n) {
    return;
    }
    int max = left;
    if (right < n && nums[left] > nums[right]) {
    max = right;
    }
    if (nums[i] >= nums[max]) {
    return;
    }
    swap(nums, i, max);
    MaxHeapFixedDown(nums, max, n);
    }

    ������������

    • ������������������������������������������������������������������������������������������������������������������������
    • ���������������������������������������������������������������������������������

    ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

    上一篇:最短摘要的生成
    下一篇:3.1小结

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月19日 04时01分45秒