gpt4 book ai didi

c - 排序**矩阵结构

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:31 25 4
gpt4 key购买 nike

我会在 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

最佳答案

这里是交换错误

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

关于c - 排序**矩阵结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32257130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com