0
点赞
收藏
分享

微信扫一扫

JAVA快排数组被卡常?试试优先队列(堆排)

巧乐兹_d41f 2022-01-09 阅读 57
java

快排的最坏时间复杂度可以达到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);
举报

相关推荐

0 条评论