如何使用 qsort 对二维矩阵的行进行排序?
How to sort the rows of a 2D Matrix using qsort?
我的许多同事问我是否可以通过使用 <stdlib.h>
中的函数 qsort()
来排列二维数组的每一行来排列矩阵,例如:
5, 8, 7, 6,
1, 4, 3, 2,
11, 12, 10, 9,
变成类似这样的东西:
5, 6, 7, 8,
1, 2, 3, 4,
9, 10, 11, 12,
问题的解决方案如下所示:
#include <stdio.h> // scanf() printf()
#include <stdlib.h> // qsort()
int compare (const void *a, const void *b)
{
int x = *(int *)a;
int y = *(int *)b;
if (x<y) return -1;
if (x>y) return 1;
return 0;
}
int main()
{
// Syntax of a 2D Array: array[rows][cols]
int rows = 3, cols = 4;
int array[3][4] = { {5,8,7,6,}, {1,4,3,2}, {11,12,10,9} };
// Print the matrix unsorted:
printf("\nUnsorted rows:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%2d, ", array[i][j]);
}
printf("\n");
}
// Sort the matrix using qsort:
for(int j = 0; j < rows; j++)
qsort(array[j], cols, sizeof(int), compare);
// Print the matrix sorted:
printf("\nSorted rows:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%2d, ", array[i][j]);
}
printf("\n");
}
return 0;
}
输出:
Unsorted rows:
5, 8, 7, 6,
1, 4, 3, 2,
11, 12, 10, 9,
Sorted rows:
5, 6, 7, 8,
1, 2, 3, 4,
9, 10, 11, 12,
感谢 flukey 在以下位置提供的有用答案:
Qsorting 2d pointer arrays
帕特里克,
将二维数组想象成许多一维数组的组合。
使用 2 个循环对每个一维数组(行)进行排序。一个循环遍历(列),一个循环遍历一维数组。在第二个内部循环中,您可以执行排序。
我的许多同事问我是否可以通过使用 <stdlib.h>
中的函数 qsort()
来排列二维数组的每一行来排列矩阵,例如:
5, 8, 7, 6, 1, 4, 3, 2, 11, 12, 10, 9,
变成类似这样的东西:
5, 6, 7, 8, 1, 2, 3, 4, 9, 10, 11, 12,
问题的解决方案如下所示:
#include <stdio.h> // scanf() printf()
#include <stdlib.h> // qsort()
int compare (const void *a, const void *b)
{
int x = *(int *)a;
int y = *(int *)b;
if (x<y) return -1;
if (x>y) return 1;
return 0;
}
int main()
{
// Syntax of a 2D Array: array[rows][cols]
int rows = 3, cols = 4;
int array[3][4] = { {5,8,7,6,}, {1,4,3,2}, {11,12,10,9} };
// Print the matrix unsorted:
printf("\nUnsorted rows:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%2d, ", array[i][j]);
}
printf("\n");
}
// Sort the matrix using qsort:
for(int j = 0; j < rows; j++)
qsort(array[j], cols, sizeof(int), compare);
// Print the matrix sorted:
printf("\nSorted rows:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%2d, ", array[i][j]);
}
printf("\n");
}
return 0;
}
输出:
Unsorted rows: 5, 8, 7, 6, 1, 4, 3, 2, 11, 12, 10, 9, Sorted rows: 5, 6, 7, 8, 1, 2, 3, 4, 9, 10, 11, 12,
感谢 flukey 在以下位置提供的有用答案: Qsorting 2d pointer arrays
帕特里克,
将二维数组想象成许多一维数组的组合。
使用 2 个循环对每个一维数组(行)进行排序。一个循环遍历(列),一个循环遍历一维数组。在第二个内部循环中,您可以执行排序。