Проблема 2D-массива Bubbleort с функцией void - PullRequest
1 голос
/ 25 мая 2020

Я получаю сообщение об ошибке, когда хочу bubblesort массив. Думаю, проблема в указателях. Ошибка здесь if (array[i * 3 + j] > array[i * 3 + m]) Имя ошибки: subscripted value is neither array nor pointer nor vector.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int *create_matrix_fill_random(int satir, int sutun);
int *bubblesort(int array);

int main() {
    srand(time(NULL));
    printf("Matrix automatically created 3x3");
    int a = 3;
    int *matrix = create_matrix_fill_random(a, a);
    matrix = bubblesort(matrix);

    return 0;
}

int *create_matrix_fill_random(int row, int col) {
    int *ptr;
    ptr = malloc(row * col * sizeof(int));
    int i, j;
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++) {
            ptr[i * col + j] = rand() % 40000 + 5;
        }
    }
    return ptr;
}

int *bubblesort(int array) {
    int m, a = 3;
    int temp;
    for (int i = 0; i < 3; i++) { 
        for (int j = 0; j < 3; j++) { 
            for (m = 0; m < 3 - 1; m++) {   
                if (array[i * 3 + j] > array[i * 3 + m]) {  
        //Mistake ^ ^ ^ ^ ^ ^ ^ ^
                    temp = array[i * 3 + j];           
                    array[i * 3 + j] = *array[i * 3 + m];
                    array[i * 3 + j] = temp;   
                }
            }
        }
        return array;
    }
}

1 Ответ

1 голос
/ 25 мая 2020

В прототипе функции bubblesort отсутствует *.

Кроме того, оператор return должен быть перемещен за пределы тела внешнего оператора for, а часть индекса значения неверны.

Вот модифицированная версия:

int *bubblesort(int *array) {      // fix
    int m, a = 3;
    int temp;
    for (int i = 0; i < a; i++) { 
        for (int j = 0; j < a; j++) { 
            for (m = j + 1; m < a; m++) {    // fix
                if (array[i * a + j] > array[i * a + m]) {  
                    temp = array[i * a + j];           
                    array[i * a + j] = *array[i * a + m];
                    array[i * a + m] = temp;   // fix
                }
            }
        }
    }
    return array;
}
...