C中的冒泡排序二维数组

Bubble sort 2D array in C

我需要一个函数来对这个随机生成的二维数组进行冒泡排序。 同样使用 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;

}

使用冒泡排序对二维数组进行排序与​​对一维数组进行排序略有不同。 This example 可能会帮助您解决这部分问题。

其他问题

基于此部分:

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 casting the return of [c][m][re]alloc is not recommended 中。)

还有 rand() 方法我希望它生成 (1, 1000000) 之间的数字但是它没有给出所需的范围,有什么建议可以找到解决方案?

(归功于 this answer

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;
}