gpt4 book ai didi

c - 我的蛇排序算法中的段错误(核心转储)错误

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

尝试使用 c 中的蛇排序对以下 4x4 矩阵进行排序:

13 16 12 8

5 9 10 1

3 11 2 4

7 6 15 14

但是,当我运行我的代码时,出现了段错误(核心已转储)错误。以前从未见过这个。我不确定我在哪里尝试访问我不应该在此代码中的内存。

void EvenRowSort(int matrix[4][4], int i, int n){
int j, temp=0;
for(j=0;j<n-1;j++){
if(matrix[i][j] > matrix[i][j+1]){
temp = matrix[i][j+1];
matrix[i][j+1] = matrix[i][j];
matrix[i][j] = temp;
}
}
}

void OddRowSort(int matrix[][4], int i, int n){
int j, temp=0;
for(j=0;j<n-1;j++){
if(matrix[i][j] < matrix[i][j+1]){
temp = matrix[i][j+1];
matrix[i][j+1] = matrix[i][j];
matrix[i][j] = temp;
}
}
}

void ColSort(int matrix[][4], int j, int n){
int temp, i = 0;
for(i=0; i <n-1;j++){
if(matrix[i][j] > matrix[i+1][j]){
temp = matrix[i+1][j];
matrix[i+1][j] = matrix[i][j];
matrix[i][j] = temp;
}
}
}

void SnakeSort(int matrix[][4], int n){
int m, i, j, k;
//m=log(n)/log(2);
m=3;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if((j % 2) == 0)
EvenRowSort(matrix, j, n);
else
OddRowSort(matrix, j, n);
}
for(k=0;k<n;k++)
ColSort(matrix, k, n);
}

}

int main(void){
FILE *inFile;
inFile = fopen("input.txt","r");
int n=4;
int matrix[n][n];
int i, j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
fscanf(inFile, "%d", &matrix[i][j]);
//printf("input number is: %d\n", matrix[i][j]);
}
}
printf("Input matrix is:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ", matrix[i][j]);
}
printf("\n");
}
SnakeSort(matrix, n);
printf("Output matrix is:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}

我希望得到这样的排序矩阵:

1 2 3 4

8 7 6 5

9 10 11 12

16 15 14 13

最佳答案

在函数 void ColSort(int matrix[][4], int j, int n) 中,for 循环有问题。您不会递增 i 变量,而是递增 j 变量。它超出了矩阵的界限。

所以

for(i=0; i <n-1;j++){

应替换为:

for(i=0; i <n-1;i++){

关于c - 我的蛇排序算法中的段错误(核心转储)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54752134/

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