堆排序

来源:互联网 发布:vb开发彩票软件教程 编辑:程序博客网 时间:2024/05/13 12:24
/** * 堆排序 *  * @param a *  */public static void heapSort(int[] a) {for (int i = (a.length - 2) / 2; i >= 0; i--) { // 从最后一个非叶子节点开始初始化堆adjustHeap(a, a.length, i);}int[] tmp = new int[a.length];for (int i = 0; i < a.length; i++) { // 输出堆tmp[i] = a[0];swap(a, 0, a.length - 1 - i); // 最后一个节点交换到第一个节点adjustHeap(a, a.length - i - 1, 0); // 调整堆,同时堆的大小减小了}System.arraycopy(tmp, 0, a, 0, a.length);}private static void adjustHeap(int[] a, int n, int k) { // 调整堆int k1 = k * 2 + 1;int k2 = k * 2 + 2;if (k2 < n) {if (a[k] > a[k2]) {swap(a, k, k2);adjustHeap(a, n, k2);}}if (k1 < n) {if (a[k] > a[k1]) {swap(a, k, k1);adjustHeap(a, n, k1);}} else {return;}}

0 0
原创粉丝点击