我有一个 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 标准库,像这样(任何 ROWS
xCOLS
矩阵的通用示例):
#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/