public static void heapSortTest(int[] arr) { //大顶堆 二叉树的第一个非叶子节点 length/2-1 i节点的左子节点 2*i+1 右子节点 2*i+2 //第一个非叶子节点开始 for (int node_inx = arr.length / 2 - 1; node_inx >= 0; node_inx--) { adjustHeapTest(arr, node_inx, arr.length); } for (int i = arr.length - 1; i > .0; i--) { //调整后的大顶堆,进行交换位置 int t = arr[0]; arr[0] = arr[i]; arr[i] = t; adjustHeapTest(arr, 0, i); } } //调整为大顶堆 private static void adjustHeapTest(int[] arr, int i, int length1) { int temp = arr[i]; //非叶子节点的左节点 for (int k = 2*i+1; k < length1; k=2*k+1) { if(k+1 < length1 && arr[k] < arr[k+1]){ k++; //取右节点 } //交换 if(temp < arr[k]){ int t = arr[i]; arr[i] = arr[k]; arr[k] = t; i = k; //重点 }else{ break; } } }