首页 > 代码库 > 排序值 堆排序
排序值 堆排序
按照算法导论上的实现,不过把下标改成从0开始了。
原理:
import java.util.Arrays;public class Solution { /** * 每次将堆顶元素交换到最后并从堆中除掉。 * * @param a */ public static void heapSort(int[] a) { buildHeap(a); int n = a.length - 1; for (int i = a.length - 1; i > 0; i--) { swap(a, 0, i); // 堆的大小每次减1 maxHeapify(a, n--, 0); } } /** * O(n)时间建堆 */ private static void buildHeap(int[] a) { for (int i = a.length / 2; i >= 0; i--) maxHeapify(a, a.length, i); } /** * n 表示当前堆的大小 */ private static void maxHeapify(int[] a, int n, int i) { int l = left(i); int r = right(i); int largest = i; if (l < n && a[l] > a[i]) largest = l; if (r < n && a[r] > a[largest]) largest = r; if (largest != i) { swap(a, i, largest); maxHeapify(a, n, largest); } } private static void swap(int[] a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } private static int left(int i) { return 2 * i + 1; } private static int right(int i) { return 2 * i + 2; } public static void main(String[] args) { int[] a = { 2, 8, 7, 1, 3, 5, 6, 4 }; System.out.println("before sorting:" + Arrays.toString(a)); heapSort(a); System.out.println("after sortint:" + Arrays.toString(a)); }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。