C语言中的气泡排序2D数组

C语言中的气泡排序2D数组,c,arrays,random,bubble-sort,C,Arrays,Random,Bubble Sort,我需要一个函数来对随机生成的2D数组进行气泡排序。 同样使用rand()方法,我希望它生成介于(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"

我需要一个函数来对随机生成的2D数组进行气泡排序。 同样使用rand()方法,我希望它生成介于(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;

}
int**matrix()
{
int**矩阵;
int行,列;
长s,k;
int i,j,f,swap;
srand(时间(空));
printf(“行数:”);
scanf(“%d”行和第行);
printf(“列数:”);
scanf(“%d”列和列);
矩阵=(int**)calloc(row,sizeof(int));
对于(i=0;i
使用气泡排序对二维数组进行排序与对一维数组进行排序略有不同。我可以帮你回答这部分问题

其他问题

根据本节:

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

 matrix = calloc(row, sizeof(int *));
                                 ^
(注意,
calloc()
的强制转换也已删除。在C中。)

同样使用rand()方法,我希望它生成介于(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;

}
(记入贷方)

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;
}
unsigned long rand_ex(void);
内部主(空){
srand(clock());

对于(int i=0;i
matrix=(int**)calloc(row,sizeof(int));
-->
matrix=calloc(row,sizeof(int*);
OT:我将使用
而不是
冒号来尝试打印。它可能少于10000000。这里使用的内存分配方法有点缺陷(请参阅答案)并且不会创建连续内存,这可能会使冒泡排序的操作复杂化。您是否考虑过使用?这将生成一个连续内存块。例如:
int rows=1000;int cols=1000;int array[rows][cols]={0};
创建
1000000
连续的
int
内存位置,然后按照通常的方式对其进行气泡排序:在嵌套的
中,我可以回答您的问题吗?