package com.kingdz.algorithm.time201702;import java.util.Arrays;/** * 算法书中的堆排序实现 * * @author kingdz * */public class Algo21 { public static void main(String[] args) { int count = 10; int[] number = new int[count]; number = Algo13.fillArray(count, false); System.out.PRintln(Arrays.toString(number)); heapSort(number, number.length); System.out.println(Arrays.toString(number)); } /** * 调整第s个结点 * * @param a * @param s * @param n */ static void heapAdjust(int[] a, int s, int n) { // 第s个节点有子树 while (2 * s + 1 < n) { int j = 2 * s + 1; // 如果有右子树 if (j + 1 < n) { // 左子树小于右子树 if (a[j] < a[j + 1]) { j++; } } // s结点如果小于左右子树中最大的j,则交换 if (a[s] < a[j]) { int t = a[s]; a[s] = a[j]; a[j] = t; s = j; } else { break; } } } static void heapSort(int[] a, int n) { for (int i = n / 2 - 1; i >= 0; i--) { heapAdjust(a, i, n); } for (int i = n - 1; i > 0; i--) { int t = a[0]; a[0] = a[i]; a[i] = t; heapAdjust(a, 0, i); } }}
新闻热点
疑难解答