#include<stdio.h>
#include<stdlib.h>
int sort_mas(const int *i, const *j){
return *i - *j;
}
int main(){
srand(time(NULL));
int n=4;
int b=5;
int **mat=malloc(n*sizeof(int*));
for(int i=0;i<b;i++)
mat[i]=malloc(b*sizeof(int));
for(int i=0;i<n;i++){
for(int j=0;j<b;j++){
mat[i][j]=rand() %40;
printf("%3d",mat[i][j]);
}
printf("\n");
}
printf("\n");
qsort(mat,n*b,sizeof(int),(int(*)(const void * , const void * ))sort_mas);
for(int i=0;i<n;i++){
for(int j=0;j<b;j++)
printf("%3d",mat[i][j]);
printf("\n");
}
return 0;
}
编译器抛出分段错误(核心转储)。结果应该是这样的,比如原来的 - {{3,5,8},{2,1,7},{4,6,9}} 应该是 {{1,2,3},{ 4,5,6},{7,8,9}}
为什么突然数组初始化循环
mat
进入b
而不是n
???比较函数必须接受 type 的参数
const void *
,而不是const int *
要使用
qsort
它,必须从一开始就为数组元素分配内存作为一个连续块通话
qsort
将如下所示不应该忘记释放内存
要使用该功能
time
,您必须启用<time.h>
http://coliru.stacked-crooked.com/a/72198d3c9943be50