是否有条不紊地对二维正方形数组的值进行排序,最大值在中间,最小值在边缘?
示例:
1 5 3
8 9 6
4 7 2
或:
4 8 1
6 9 5
2 7 3
我不确定哪一个最好,或者对于nxn数组(其中n是奇数)如何做到。
答案 0 :(得分:1)
最佳时间复杂度:O(n)
,其中n
是正方形中元素的数量。这是伪代码:
m
大小的正方形。a[1..n]
。显然,n = m * m
。m * m
的正方形,边界上有k = 4 * (m - 1)
个元素,中间有l = max(4 * (m % 2), 1)
个值。a[1..n]
调用整个数组k
的最小版本(第K个最小元素)。现在,数组的前k
个元素,即子数组a[1..k]
将包含数组的最小元素。a[k+1..n]
调用此算法的最大版本(第K个最大元素)到其余子数组l
。现在,子数组a[k+1..k+l]
将包含数组中最大的元素。其余a[k+l..n]
是所有其他元素。由于K'th element是线性的,因此该算法的总体复杂度也是 linear 。