我有一个6行2列的2D数组,需要根据第二列的值进行排序。
我知道冒泡排序算法可以与一维数组配合使用,但是我对如何具体比较第二行感到困惑。
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个值。如您在上面看到的,仅第二列被排序。
答案 0 :(得分:1)
为什么要重新发明轮子?使用C标准库中的qsort()
,如下所示(任何ROWS
x COLS
矩阵的通用示例):
#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