Ошибка сегментации (ядро сброшено) ошибка в моем алгоритме сортировки змей - PullRequest
0 голосов
/ 18 февраля 2019

Попытка отсортировать следующую матрицу 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

1 Ответ

0 голосов
/ 18 февраля 2019

В функции 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++){
...