法國經濟學家:全球晶片短缺不會導致半導體價格普遍上漲
阿新 • • 發佈:2021-06-04
/** * @Author: WhaleFall541 * @Date: 2021/6/12 16:43 * @see <a href="https://www.bilibili.com/video/BV1Eb41147dK?t=1590">https://www.bilibili.com/video/BV1Eb41147dK?t=1590</a> */ public class HeapSort { public static void main(String[] args) { int[] arr = new int[]{4, 10, 3, 5, 1, 2}; heapSort(arr); StringBuilder sb = new StringBuilder(); for (int i : arr) sb.append(i).append(" "); System.out.println("sb = " + sb); } private static void heapSort(int[] arr) { int n = arr.length; // 初始化堆 從最大的非葉子節點開始樹化到頭節點 // last_node = n-1 // 又 parent = (i-1)/2 for (int i = (n - 2) / 2; i >= 0; i--) heapAdjust(arr, n, i); // 將大根堆中 根節點和最後一個節點互換位置 for (int j = n - 1; j >= 0; j--) { swap(arr, j, 0); // 對剩下的堆 j個元素進行樹化 heapAdjust(arr, j, 0); } } /** * 對第i個節點所在的樹進行樹化,生成大根堆 * * @param arr 需要樹化的陣列 * @param n 樹化時數的長度 * @param i 當前樹化的位置 */ private static void heapAdjust(int[] arr, int n, int i) { if (i >= n) return; int left = i * 2 + 1; int right = i * 2 + 2; int max = i; if (left < n && arr[left] > arr[max]) max = left; if (right < n && arr[right] > arr[max]) max = right; if (max != i) { swap(arr, max, i); // 樹化交換後max的位置,直到葉子節點或者沒有交換情況為止 heapAdjust(arr, n, max); } } private static void swap(int[] arr, int a, int b) { int tmp = arr[a]; arr[a] = arr[b]; arr[b] = tmp; } }