我会在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
答案 0 :(得分:2)
交换中出现错误
temp= matrix[i][j];
matrix[i][j]= matrix[i][j+1];
matrix[i][j]= temp;
应该是
temp= matrix[i][j];
matrix[i][j]= matrix[i][j+1];
matrix[i][j+1]= temp; // <--- j+1
修改强>
排序也失败,因为j
循环可以在i
循环之前启动并反转先前的交换。但是你还不清楚你要尝试排序的方式。假设您正在尝试对每一行进行排序:
for (k=0; k<nrow; k++) {
for (i=0; i<ncol-1; i++) { //<--- stops with room for j
for (j=i+1; j<ncol; j++) { //<--- starts at i+1
if(matrix[k][j] < matrix[k][i]) {
temp= matrix[k][i];
matrix[k][i]= matrix[k][j];
matrix[k][j]= temp;
}
}
}
}