C 按升序或降序打印二维数组元素

标签 c arrays sorting

我有一个二维数组,其中许多元素为零。例如:

int array[10][10];
memset(array, 0, 100 * sizeof(int));
array[0][0] = 3;
array[2][8] = 5;
array[4][0] = 4;

如何按降序(或升序)打印非零(仅正数)元素。我在想这样的事情:

int xpos, ypos;
while (getMaximumInArray(array, &xpos, &ypos))
    {
    printf("x=%i y=%i val=%i\n", xpos, ypos, array[xpos][ypos]);
    array[xpos][ypos] = 0; // set to 0 to make sure we find the next biggest value.
    }

然而,这使我多次循环遍历数组(只要有非零元素)。有更好的(即更少的操作)方法来做到这一点吗?

编辑:我忘记指定我想在输出中使用这些位置;所以我不仅需要排序后的值;还有他们的指数...

最佳答案

提高效率的一个简单方法是对值进行简单排序。排序(或排序时复制)的运行时复杂度为 O(n log n),这比 O(n*n) 有所改进。一种简单有效的方法是将非零值复制到 std::multiset 中,然后迭代它。

<小时/>

有关您的编辑的更新:

没问题。只需存储一个包含集合中的值和索引的对象,并提供一个仅使用该值的比较仿函数。

关于C 按升序或降序打印二维数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34018376/

相关文章:

c - C 中分割数字的总和

arrays - 查找数组中最长的单词,该单词由数组中的其他单词组成

用于 Android 应用程序的 Java 多维数组

bash - 过滤文本文件以根据第 3 列中的值获取唯一条目

javascript - jquery 停止对象排序

c++ - 是否有任何理由在没有方法的 header 上使用 extern "C"?

c - 读取带有 float 的数组(C 编程语言)

c - Go:导入和 C 库之间的类型冲突

java - 如何在 Android 中对 ArrayAdapter<String> 进行排序?

java - 字符串基数排序 - StringIndexOutOfBoundsEception