堆排序
public class HeapSort { public static void main(String[] args) { int a[] = { 3, 5, 1, 4, 7, 8 }; sort(a); System.out.println(Arrays.toString(a)); } private static void sort(int[] a) { // 初始化堆,从第一个非叶子结点开始 for (int i = a.length / 2 - 1; i >= 0; i--) { justHeap(a, i, a.length); } // 交換收尾元素 + 调整堆 for (int i = 0; i < a.length; i++) { int temp = a[0]; a[0] = a[a.length - i - 1]; a[a.length - i - 1] = temp; justHeap(a, 0, a.length - i - 1); } } private static void justHeap(int[] a, int i, int length) { int temp = a[i]; for (int k = 2 * i + 1; k < length; k = 2 * i + 1) { if (k + 1 < length && a[k] < a[k + 1]) // 当前结点的左孩子 小于右孩子,k指向右孩子 k++; if (a[k] > temp) { a[i] = a[k]; i = k; } else break; } a[i] = temp; } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步