快排的最坏时间复杂度可以达到O(n^2)。有人说这种概率极小,但如果测试数据被精心安排过呢?尤其是对于轻易就被卡常的JAVA来说。快排不小心就T掉。另外,空间复杂度上,快排主递归时需要使用栈空间,最坏O(n),最好O(logn)。
堆排序是一个宝藏,它的平均、最坏、最好时间复杂度都是O(nlogn)级别的,有时更少。并且空间复杂度为常数级别。然而为什么大家更推崇快排?
不要因此忽视堆排序。在ACM中,堆排序可以比快速排序快很多。写法:
PriorityQueue<Integer> q = new PriorityQueue<>();
for(int i=0;i<n;i++) {
q.add(sc.nextInt());
}
for(int i=0;i<n;i++) {
a[i]=q.poll();
sum+=a[i];
}
//Arrays.sort(a);