这篇文章主要介绍“java堆排序算法的原理和作用”,在日常操作中,相信很多人在java堆排序算法的原理和作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java堆排序算法的原理和作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
由下图(网上找的),堆排序类似这种,把最大的数字放到最下面的最右面位置,然后把第二大的数字放到最下层的最右面倒数第二个位置,依此类推,如下:
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, 7, 8, 16, 17, 20]
到此,关于“java堆排序算法的原理和作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。