2D-массив пузырьковой сортировки в C - PullRequest
0 голосов
/ 26 мая 2020

Мне нужна функция для пузырьковой сортировки этого случайно сгенерированного 2D-массива. Также с помощью метода rand () я хотел, чтобы он генерировал числа между (1, 1000000), но он не дает требуемый диапазон, какие-либо предложения по поиску решения?

int **matrix()
{

    int **matrix;
    int row, column;
    long s, k;
    int i,j,f,swap;


    srand(time(NULL));
    printf("Number of rows: ");
    scanf("%d", &row);

    printf("Number of column: ");
    scanf("%d", &column);


    matrix = (int **) calloc(row, sizeof(int));


    for(i = 0; i < row; i++)
        matrix[i] = (int *) calloc(column, sizeof(int));


    for(s = 0; s < row; s++)
    {
        for(k = 0; k < column; k++)
        {

            matrix[s][k]=rand()%10000000;
        }
    }

    for(s = 0; s < row; s++)
    {
        for(k = 0; k < column; k++)
            printf("%4d \t\t", matrix[s][k]);

        printf("\n");
    }


    for(i = 0; i < row; i++)
        free((void *) matrix[i]);


    free((void *) matrix);

    return **matrix;

}

1 Ответ

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

Сортировка 2D-массива с помощью пузырьковой сортировки немного отличается от сортировки одномерного массива. Этот пример может помочь с этой частью вашего вопроса.

Другие проблемы :

На основе этого раздела:

for(i = 0; i < row; i++)
     matrix[i] = (int *) calloc(column, sizeof(int));

Строка в предыдущем разделе:

 matrix = (int **) calloc(row, sizeof(int));
                                        ^

Следует выделить память для int *

 matrix = calloc(row, sizeof(int *));
                                 ^

(Обратите внимание, что приведение для calloc() также было удалено. В C приведение возврата [c ] [m] [re] allo c не рекомендуется .)

Также с методом rand () Я хотел, чтобы генерировать числа между (1, 1000000), но он не дает требуемый диапазон, любые предложения по поиску решения ?

(с учетом этот ответ )

rand() расширен, чтобы обеспечить псевдо случайное распределение 1000000 уникальных значений:

unsigned long rand_ex(void);

int main(void){

    srand(clock());
    for(int  i=0;i<100;i++)
    {
        printf("%10d:  %10lu\n", i, rand_ex());
    }
    return 0;
}

unsigned long rand_ex(void)
{     
    unsigned long x;
    x = rand();
    x <<= 15;
    x ^= rand();
    x %= 1000001;

    return x;
}
...