堆排序

作者: 第六象限 | 来源:发表于2018-06-18 13:24 被阅读0次
package heapSort;

import org.junit.Test;

public class Main {
    /**
     * 堆调整算法
     *
     * @param num 数组
     * @param s   调整节序号
     * @param l   数组排序最大的序号
     */
    public void HeapAdjust(int[] num, int s, int l) {
        int i, j;
        int temp = num[s];
        i = s;
        // 根据二叉树的性质可知道每一个序号对应的子节点以及双亲节点
        for (j = 2 * i + 1; j <= l; j = 2 * j + 1) {
            //判断如果j指向数值较大的节点
            if (j < l && num[j] < num[j + 1]) {
                j = j + 1;
            }
            //如果调整节点大于其子节点最大的值则无需调整
            if (temp > num[j]) {
                break;
            }
            //如果小于则将子节点移动到根节点位置,如果还存在子节点则继续判断调整位置的子节点
            //准备继续向下 调整节点
            num[i] = num[j];
            i = j;
        }
        //最后插入数据
        num[i] = temp;
    }

    /**
     * 堆建立初始化函数
     *
     * @param nums 数组序列
     * @param l    最大序号
     */
    public void HeapInit(int[] nums, int l) {
        for (int i = (l - 1) / 2; i >= 0; i--) {
            HeapAdjust(nums, i, l);
        }
    }


    public void HeapSort(int[] nums, int l) {
        for (int i = l; i > 0; i--) {
            int temp = nums[0];
            nums[0] = nums[i];
            nums[i] = temp;
            //因为每次调整都是对根节点进行调整所以下列方法s永远为0
            HeapAdjust(nums, 0, i - 1);
        }
    }


    @Test
    public void test() {
        int[] nums = {3, 2, 4, 9, 8,1,7};
        int l=nums.length-1;
        HeapInit(nums, l);
        HeapSort(nums, l);
        for (int n : nums)
            System.out.println(n);
    }

相关文章

  • 堆排序

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

  • 堆排序---基础篇

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

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

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

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序

    原创 堆排序: 使用visit数组从本质出发获取大顶堆排序。

  • 堆排序

    堆排序

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

网友评论

      本文标题:堆排序

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