在中间用最大值填充2D数组的算法

时间:2019-07-18 20:59:18

标签: arrays algorithm sorting matrix 2d

是否有条不紊地对二维正方形数组的值进行排序,最大值在中间,最小值在边缘?

示例:

1 5 3 

8 9 6 

4 7 2

或:

4 8 1

6 9 5

2 7 3

我不确定哪一个最好,或者对于nxn数组(其中n是奇数)如何做到。

1 个答案:

答案 0 :(得分:1)

最佳时间复杂度:O(n),其中n是正方形中元素的数量。这是伪代码:

  • 假设我们有一个m大小的正方形。
  • 将正方形中的元素放入线性数组中(如果尚未将其另存为线性数组)。我们称之为a[1..n]。显然,n = m * m
  • 对于大小为m * m的正方形,边界上有k = 4 * (m - 1)个元素,中间有l = max(4 * (m % 2), 1)个值。
  • 执行K'th element算法两次:
    • 首先,使用参数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