在堆排序中,会大量的随机存取数据;而在快速排序中,只会大量的顺序存取数据。随着数据规模的扩大,这方面的差距会明显增大。在这方面的时间开销来说,快速排序只会线性增长,而堆排序增加幅度很大,会远远大于线性。 在快速排序中,每次数据移动都意味着该数据距离它正确的位置越来越近,而在堆排序中,类似将堆尾部的数据...
}// 从上往下堆化,对于完全二叉树而言,号子结点起始位置: "arr.length / 2 + 1"publicvoidheavify(int[] arr){for(inti=arr.length /2; i >=1; --i) {// 随机数据的插入和删除,堆的长度会发生变化,需要第二个参数来控制向下堆化的最大位置shiftDown(i, arr.length, arr[i]); } }// 大顶...