我试图排序二维数组。首先我排序它的列,然后行。列的列是工作,但行的行不。什么是错误的,在这段代码?
int scmpr (const void *a, const void *b){
return strcmp((const char*)a, (const char*)b);
}
int main(void){
int i,j;
char **tab;
tab=(char**)malloc(sizeof(char*)* 10);
for(i=0; i<10; i++){
tab[i]=(char*)malloc(sizeof(char)*15);
}
for(i=0; i<10; i++){
for(j=0; j<15; j++){
tab[i][j]=rand()%20+'b';
printf("%c ", tab[i][j]);
}
puts("");
}
for (i = 0; i<10; i++){
qsort(&tab[i][0], 15, sizeof(char), scmpr);
}
qsort(tab, 10, sizeof(char), scmpr); //<-- doesn't work
for(i=0; i<10; i++){
for(j=0; j<15; j++){
printf("%c ", tab[i][j]);
}
puts("");
}
puts("");
return 0;
}
3条答案
按热度按时间l7mqbcuq1#
我想你的意思是
程序输出可能如下所示
kupeojn62#
dnph8jn43#
qsort
对数组元素排序
使用compar函数确定顺序,对由base指向的数组的num个元素进行排序,每个元素的大小为字节长。
此函数使用的排序算法通过调用指定的compar函数(将指向元素对的指针作为参数)来比较元素对。
该函数不返回任何值,但修改base所指向的数组的内容,并按照比较的定义对其元素进行重新排序。
等价元素的顺序未定义。
因此,它将对i列表中的每组15个元素进行排序,作为一个普通数组,这将给予你看到的结果。然而,由于“j”是分开的。你需要做的是为i的每个值创建一个一维数组表。然后在每个一维行上执行qsort后,将它们适当地移动到原始的2D表中。
将对tab的前10个(字符)元素进行qsort,而不是按预期对行进行qsort。