博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java-堆排序
阅读量:4314 次
发布时间:2019-06-06

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

public class Main {    public static void main(String[] args) {        int a[] = {8, 2, 5, 6, 4, 8, 9, 7, 14, 2, 3, 6, 4};        a = heapSort(a);        for (int i=0;i
= 0; i--) { adjustDownToUp(a, i, a.length); } return a; } //将元素array[k]自下往上逐步调整树形结构 private static void adjustDownToUp(int[] a, int k, int length) { int temp = a[k]; for (int i = 2 * k + 1; i < length - 1; i = 2 * i + 1) { //i为初始化为节点k的左孩子,沿节点较大的子节点向下调整 if (i < length && a[i] < a[i + 1]) { //取节点较大的子节点的下标 i++; //如果节点的右孩子>左孩子,则取右孩子节点的下标 } if (temp >= a[i]) { //根节点 >=左右子女中关键字较大者,调整结束 break; } else { //根节点
<左右子女中关键字较大者 a[k]="temp;" 将左右子结点中较大值array[i]调整到双亲节点上 k="i;" 修改k值,以便继续向下调整 } 被调整的结点的值放入最终位置 堆排序 public static int[] heapsort(int[] array) { array="buildMaxHeap(array);" 初始建堆,array[0]为第一趟值最大的元素 for (int i - 1;>
1; i--) { swap(array, 0, i);//将堆顶元素和堆低元素交换,即得到当前最大元素正确的排序位置 adjustDownToUp(array, 0, i); //整理,将剩余的元素整理成堆 } return array; } //交换 public static void swap(int a[], int i, int j) { a[i] = a[i] + a[j]; a[j] = a[i] - a[j]; a[i] = a[i] - a[j]; }}

直接上代码,从代码中细细品味,分析。

思路:1、构建大堆或小堆 2、交换、调整

转载于:https://www.cnblogs.com/pilihaotian/p/8822930.html

你可能感兴趣的文章
转 sql删除重复记录
查看>>
Yum数据库错误
查看>>
HDOJ树形DP专题之考研路茫茫——空调教室
查看>>
《结对-蓝牙考勤系统-测试过程》
查看>>
PAT 1034. Head of a Gang
查看>>
微信分享
查看>>
《数据结构》第1章:绪论
查看>>
基于域名的虚拟主机(最常用)
查看>>
第八讲 shiro 整合 ssm
查看>>
Lucene
查看>>
[LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项
查看>>
CNN反卷积理解
查看>>
chrome 中firstChild老是出错
查看>>
Java 7 新的 try-with-resources 语句,自动资源释放
查看>>
封装一个函数, 查看数字在数组中是否出现过, 如果出现过就返回数字在数组中的位置,没有出现过返回-1;...
查看>>
查看用户登录情况
查看>>
双栈排序-NOIP2008T4
查看>>
C#多线程及GDI(Day 23)
查看>>
static关键字
查看>>
Oracle the network adapter could not establish the connection
查看>>