c - 二维数组的排序

标签 c

我正在尝试解决二维数组的问题,但几乎不需要帮助。问题是这样的:

假设我们有一个大小为 nxn 的二维数组 A,由唯一元素组成。需要按如下方式重新排列 A 的元素。设 A11、A12、A21、A22 是 A 的四个相互不相交的子数组,每个子数组的大小为 n/2 x n/2。那么 A11 < A12 < A21 < A22。如果每个子数组都递归地分成四个大小相等的子数组,则该属性也成立。

用户输入:n,N(≥ n2)。 n 是 2 的幂

我尝试了很多方法,但似乎没有任何效果。

最佳答案

您需要创建一个函数,根据相关顺序将 0 到 n*n-1 之间的索引转换为数组中的坐标。然后,您只需在大小为 n*n 的数组上运行一些常用的一维排序算法,其中的第 j 个元素将使用该函数进行替换。它解决了问题。

更新:映射函数将此矩阵中的数字映射到它们的坐标:

 0  1  4  5
 2  3  6  7
 8  9 12 13
10 11 14 15

关于c - 二维数组的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883349/

相关文章:

c - Linux 命令中的更多选项和编译错误

访问二维数组的正确方法 - C

python - 从 C 扩展调用 Python 函数的速度成本

c - 重复太快时,GTK3 有时会忽略 gtk_widget_queue_draw?

c - Keil C 中的 malloc 不会失败

c++ - 如何让两个子进程互相等待

c - 初始化二维宽字符数组时出错?

c++ - 在 C 中使用 32 位整数的未使用内存

c - GCC源代码目录(.c文件)

计算平均海平面变化