c - 如何将二维数组从最大到最小排序

标签 c arrays algorithm sorting

我有一个 6 行 2 列的二维数组,需要根据第二列的值进行排序。

我知道冒泡排序算法适用于一维数组,但我对如何专门比较第二行感到困惑。

for (int i = 1; i < 7; i++) {
    for (int j = i + 1; i < 7; i++) {
       int temp = copy[i][j];
       copy[i][j] = copy[j][i];
       copy[j][i] = temp;
    }
}

我希望我的代码看起来像这样:

1.0 10.0
2.0 8.0
3.0 11.0 
4.0 12.0 
5.0 2.0
6.0 7.0 

为此:

4.0 12.0
1.0 10.0
3.0 11.0
2.0 8.0
6.0 7.0 
5.0 2.0 

当使用这段代码对数组进行排序时,我只得到 1 个值。正如您在上面看到的那样,只有第二列被排序。

最佳答案

为什么要重新发明轮子?使用 qsort()来自 C 标准库,像这样(任何 ROWSxCOLS 矩阵的通用示例):

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* qsort */
#define ROWS 6
#define COLS 2

int cmp(const void* p1, const void* p2)
{
  const float* arr1 = (const float*)p1;
  const float* arr2 = (const float*)p2;
  return (arr2[1] > arr1[1]) - (arr2[1] < arr1[1]);
}

int main(void)
{
  float array[ROWS][COLS] = {
    {1.0, 10.0},
    {2.0, 8.0},
    {3.0, 11.0},
    {4.0, 12.0},
    {5.0, 2.0},
    {6.0, 7.0}
  };

  qsort(array, ROWS, COLS * sizeof(float), cmp);

  for(int i = 0 ; i < ROWS; i++)
    printf("%f, %f\n", array[i][0], array[i][1]);

  return 0;
}

输出:

4.000000, 12.000000
3.000000, 11.000000
1.000000, 10.000000
2.000000, 8.000000
6.000000, 7.000000
5.000000, 2.000000

关于c - 如何将二维数组从最大到最小排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55540260/

相关文章:

c# - 将字符串从 c dll 返回到 c#

c - 用颜色填充 ncurses 窗口

java - 多类项目中的空数组在调用时接收数据后返回 null

php - 如何每次迭代增加一个字母 N 次并存储在数组中?

database - 文件夹搜索算法

c - 解析和 evecvp 问题

c - 即使我有错误,GCC 也不会在我的内联 asm 函数调用周围推送寄存器

java - 后缀程序的中缀。空集合异常

c++ - 了解 C++ 中的 C 字符串和字符串文字

算法:挑选 n 个不同重量的元素以获得平均元素重量