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

阅读 57

2022-01-09

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

0 0 举报