public class HeapSort{ public static void createHeap(int[] data, int n) { //n/2-1 为最后一个孩子节点的父节点 for(int i = (n/2 - 1); i >= 0; i--) { ajustHeap(data, i ,n); } } public static void exchangeHeap(int[] data, int n) { //调整第一个和最后一个数,再调整堆 for(int i = n - 1; i >= 0; i--) { swap(data, 0, i); //每次都是从0号根节点处向下调整 ajustHeap(data, 0, i); } } //小顶堆 public static void ajustHeap(int[] data. int i, int n) { int j = 2 * i - 1; //左孩子 while(j < n) { if( j+1<n && data[j] > data[j+1]) j++; if(data[i] < data[j]) //这里就表明了下面的data[i] > data[j] break; swap(data,i,j); i = j; j = 2 * i - 1; } } }