📅  最后修改于: 2023-12-03 14:43:00.311000             🧑  作者: Mango
堆排序(Heap Sort)是一种基于完全二叉树的排序算法,它的时间复杂度为O(nlogn)。
在Java中,我们可以使用优先队列(PriorityQueue)实现堆排序,因为PriorityQueue是堆的一个实现。
下面是使用PriorityQueue实现堆排序的Java代码:
public static void heapSort(int[] arr) {
PriorityQueue<Integer> heap = new PriorityQueue<>();
// 把数组元素添加到堆中
for (int num : arr) {
heap.offer(num);
}
// 依次取出堆顶元素
int index = 0;
while (!heap.isEmpty()) {
arr[index++] = heap.poll();
}
}
这里我们创建了一个PriorityQueue对象,把数组中的元素逐个添加到堆中。然后通过调用PriorityQueue的poll()方法逐个取出堆顶元素(最小元素),再把堆顶元素依次放回原数组中。
堆排序的时间复杂度为O(nlogn),空间复杂度为O(1)。相比于快速排序而言,堆排序更适用于数据量比较大,每个元素都比较重要的场合。堆排序虽然具有一定的局限性,但在大规模数据排序时仍是一个非常好的选择。