【发布时间】:2015-08-27 18:42:06
【问题描述】:
我会在 C 中对一个**矩阵结构进行排序(升序/降序无关紧要),我已经尝试过使用下面的这种排序(冒泡排序)函数,但似乎不起作用。怎么了?还有其他一些有效/清晰的方法来对矩阵进行排序吗?谢谢:-)
void sortMatrix(int **matrix,int nrow,int ncol)
{
int i, j;
int temp;
temp=0;
i=0;
while( i <nrow)
{
j=0;
while (j < ncol-1)
{
//printf("Matrix pos:[%d,%d] val:%d and matrix pos:[%d,%d] val: %d\n", i,j, matrix[i][j], i,j+1, matrix[i][j+1]);
if(matrix[i][j] < matrix[i][j+1])
{
temp= matrix[i][j];
matrix[i][j]= matrix[i][j+1];
matrix[i][j]= temp;
}
j++;
}
i++;
}
}
这是主要的,矩阵是动态分配的:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include"MatrixIO.h"
int main(void) {
int **matrix= NULL;
//int i, j;
int nrow, ncol;
//i= j= 0;
srand(time(NULL));
printf("inser NxM size\n");
scanf("%d %d", &nrow, &ncol);
matrix= allocMatrix(matrix, nrow, ncol);
fillRandMatrix(matrix, nrow, ncol);
printMatrix(matrix, nrow, ncol);
printf("Sorted:\n");
sortMatrix(matrix, nrow, ncol);
printMatrix(matrix, nrow, ncol);
system("pause");
return EXIT_SUCCESS;
}
编辑:
矩阵中的元素应该从小到大排序
34 12 2 21 98 >>>>> 2 12 21 23 33
24 45 69 98 777 >>>>> 34 45 69 98 777
【问题讨论】:
-
第 1 步是通过对矩阵进行排序来定义您的意思。您是对每一行中的元素进行排序,然后按它们的第一个元素对行进行排序,还是将整个矩阵中的最小元素移动到第一行/第一列?
-
OT:行和列的变量应该是
size_t,以及计数器i和j。 -
@user3386109 是的,我将矩阵元素从最小到最大排序,我添加了一个示例。
-
@CSDude 你现在问的是另一个问题“我该怎么办?”这与您的“有什么问题?”不同
-
在这种情况下,您可以简单地将矩阵视为一维数组并使用
qsort对其进行排序。如果愿意,我会让@WeatherVane 将其添加到答案中。
标签: c sorting matrix dynamic bubble-sort