我有以下 C 语言作业。我基本上需要一种方法而不是解决方案。
我们有一个 13 x 13 的数组。在数组中,我们有一个需要考虑的菱形形状。该菱形之外的所有内容都初始化为 -1(不重要)。下面的 5 x 5 数组示例 -
x x 1 x x
x 2 2 2 x
3 3 3 3 3
x 4 4 4 x
x x 5 x x
x=-1
现在,在这个数组中,菱形中每个条目的值包含 11 位。 5 个 lsb 包含一个数据(色调),其他 6 个包含另一个数据(直径)。我们需要按行、单调地对色调进行排序,然后按列、单调地对直径进行排序。
执行此操作最有效且最节省内存的方法是什么?由于我们需要保存它,因此最好交换条目而不是创建另一个数组。最后,我们将得到一个排序的菱形数组(仍然带有-1)。提前非常感谢大家!
我不明白你到底想如何重新排序元素
按行,单调地获取色调,然后按列,单调地获取直径
但这里有一些你可能会用到的想法。
- 您的数组为 13x13(169 个元素);其中,几乎一半 (84) 是空的,因此您可以将它们用作临时存储(例如基数排序 http://en.wikipedia.org/wiki/Radix_sort).
- 您的值有 11 个有意义的位;真实计算机中的数字有 16 位或 32 位 - 因此您可以使用 5 个(或 21 个,具体取决于您的系统)最高有效位作为临时存储。
- 使用高 5 位的一种可能的好方法是将 5 LSB(色调)的副本放在那里。在进行正常整数比较时,这将颠倒两个部分的重要性(使色调比直径更重要)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)