千家信息网

java堆排序算法的原理和作用

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍"java堆排序算法的原理和作用",在日常操作中,相信很多人在java堆排序算法的原理和作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"java堆排序
千家信息网最后更新 2025年01月31日java堆排序算法的原理和作用

这篇文章主要介绍"java堆排序算法的原理和作用",在日常操作中,相信很多人在java堆排序算法的原理和作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"java堆排序算法的原理和作用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、定义

由下图(网上找的),堆排序类似这种,把最大的数字放到最下面的最右面位置,然后把第二大的数字放到最下层的最右面倒数第二个位置,依此类推,如下:

2、代码
public class TestController {    public static void main(String[] args) {        int[] nums = {16,7,3,20,17,8};        headSort(nums);        System.out.println("结果为:" + Arrays.toString(nums));    }    /**     * 堆排序     */    public static void headSort(int[] list) {        // 构造初始堆,从第一个非叶子节点开始调整,左右孩子节点中较大的交换到父节点中        for (int i = (list.length) / 2 - 1; i >= 0; i--) {            headAdjust(list, list.length, i);        }        // 排序,将最大的节点放在堆尾,然后从根节点重新调整        for (int i = list.length - 1; i >= 1; i--) {            int temp = list[0];            list[0] = list[i];            list[i] = temp;            headAdjust(list, i, 0);        }    }    private static void headAdjust(int[] list, int len, int i) {        int k = i, temp = list[i], index = 2 * k + 1;        while (index < len) {            if (index + 1 < len) {                if (list[index] < list[index + 1]) {                    index = index + 1;                }            }            if (list[index] > temp) {                list[k] = list[index];                k = index;                index = 2 * k + 1;            } else {                break;            }        }        list[k] = temp;    }}
3、结果
结果为:[3, 7, 8, 16, 17, 20]

到此,关于"java堆排序算法的原理和作用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0