【发布时间】:2020-09-13 06:50:57
【问题描述】:
我需要一个函数来对这个随机生成的二维数组进行冒泡排序。 同样使用 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;
}
【问题讨论】:
-
matrix = (int **) calloc(row, sizeof(int));-->matrix = calloc(row, sizeof(int *));OT:我将使用column而不是colon -
尝试打印
RAND_MAX。它可能小于 10000000。 -
这里使用的内存分配方法有点缺陷,(见答案)并且不会创建连续的内存,这可能会使冒泡排序的完成方式变得复杂。您是否考虑过使用VLA?这将产生一个连续的内存块。例如:
int rows = 1000; int cols = 1000; int array[rows][cols] = {0};创建1000000连续和连续的int内存位置,然后可以按通常的方式对其进行冒泡排序:在嵌套的i<rows、j<colsfor 循环中:递增*(array + (i+j))。跨度> -
这能回答你的问题吗? BubbleSorting C language
标签: c arrays random bubble-sort