Попытка отсортировать следующую матрицу 4x4, используя сортировку змей в c:
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 23 4
8 7 6 5
9 10 11 12
16 15 14 13