Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在中间填充最大值的2D阵列算法 是否有一种有条理的方法来对二维正方形数组的值进行排序,其中最大值在中间,最小值在边缘?_Arrays_Algorithm_Sorting_Matrix_2d - Fatal编程技术网

Arrays 在中间填充最大值的2D阵列算法 是否有一种有条理的方法来对二维正方形数组的值进行排序,其中最大值在中间,最小值在边缘?

Arrays 在中间填充最大值的2D阵列算法 是否有一种有条理的方法来对二维正方形数组的值进行排序,其中最大值在中间,最小值在边缘?,arrays,algorithm,sorting,matrix,2d,Arrays,Algorithm,Sorting,Matrix,2d,示例: 1 5 3 8 9 6 4 7 2 或: 我不确定哪一个是最好的,或者对于n是奇数的nxn数组如何做。最佳时间复杂度:On,其中n是正方形中的元素数。以下是伪代码: 假设我们有一个大小为m的正方形。 如果元素尚未保存为线性阵列,则将其放入方形中的线性阵列中。我们称之为[1..n]。显然,n=m*m。 对于m×m的平方,边界上有k=4×m—1元,中间有L=最大值m4*m% 2, 1。 执行算法两次: 首先,使用参数K调用整个数组a[1..n]的第K个最小元素的最小版本。现在,阵列

示例:

1 5 3 

8 9 6 

4 7 2
或:

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

最佳时间复杂度:On,其中n是正方形中的元素数。以下是伪代码:

假设我们有一个大小为m的正方形。 如果元素尚未保存为线性阵列,则将其放入方形中的线性阵列中。我们称之为[1..n]。显然,n=m*m。 对于m×m的平方,边界上有k=4×m—1元,中间有L=最大值m4*m% 2, 1。 执行算法两次: 首先,使用参数K调用整个数组a[1..n]的第K个最小元素的最小版本。现在,阵列的前k个元素,即子阵列a[1..k]将包含阵列的最小元素。 第二,调用该算法的最大版本的第K个最大元素到剩余的子数组a[K+1..n],参数为l。现在,子阵列a[k+1..k+l]将包含阵列中最大的元素。剩下的a[k+l..n]都是其他元素。
因为是线性的,所以该算法的总体复杂度也是线性的。

为什么在示例中5、6、7、8被放置在它们的位置上,为什么1、2、3、4被放置在显示的位置上,为什么其他位置如右上角的4、左下角的1等等。?您如何用上述方案表示一个5 x 5的矩阵,其中包含1-25个数字?如果你能回答这些问题,那么实现起来很简单。是的,但是你不能像二维数组那样进行排序。相反,您可以对项目进行线性排序,然后按优先级将其放置在所需的位置。如果元素1、2、3和4可以位于示例中的任何角落,则这更多的是分区问题,而不是排序问题。@Prune:原则上,事实上,有许多有效的位置可能意味着它可以更有效地完成,而不需要对值进行完整的排序。我认为你误解了这个问题。如果有人想对数组进行排序,在开始时使用最小值,在结束时使用最大值,您是否建议他们找到最小值和最大值元素,将它们交换到正确的位置,并使数组的其余部分保持不变?@ruakh可能会,但示例中没有显示任何排序。或者它应该按环排序-那么我的答案是错误的。我从两个例子中了解到,对于3x3数组,角上的元素需要小于每边中间的元素,而每边中间的元素又需要小于正中间的元素。但我不完全确定如何推断出25x25阵列;我能想到许多看似可能的可能性。
4 8 1

6 9 5

2 7 3