排序**矩阵结构

时间:2015-08-27 18:42:07

标签: c sorting matrix dynamic bubble-sort

我会在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 个答案:

答案 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;
            }
        }
    }
}