|
是这样的 因为编程要求,我先是声明了一个3列动态二维数组s[m][3],接下来是要根据s[i][3],就是第三列的数据对整个二维数组进行降序排序。我试验了一下倘若数据m比较小就可以实现排序,如果m比较大时,就不行了,更不要谈350000了 int main() int (*s)[3]; for(i = 0; i <MAX_LINES-2;i++){ } |
|
| 30分 |
应该是
s[i][0],s[i][1],s[i][2] 而不是 s[i][1],s[i][2],s[i][3] 第三列是s[i][2]。 #include<stdio.h>
#include<time.h>
#include<stdlib.h>
int comp(const void * a,const void * b)
{
return (*(int(*)[3])b)[2]-(*(int(*)[3])a)[2]; // 这里表示降序
}
int main()
{
size_t count,i,j;
int (*datas)[3]=NULL;
clock_t cl;
scanf("%zu",&count);
datas=(int(*)[3])malloc(count*sizeof(int[3]));
if(NULL==datas)
{
fputs("内存不足",stderr);
return 1;
}
srand(time(NULL));
for(i=0;i<count;++i)
for(j=0;j<3;++j)
datas[i][j]=rand(); // 生成随机数据
cl=clock();
qsort(datas,count,sizeof(int[3]),comp); // 快速排序
cl=clock()-cl;
for(i=1;i<count;++i)
if(datas[i][2]>datas[i-1][2]) // 如果后者大于前者,则排序有错误。
break;
if(i==count)
puts("排序正确");
else
puts("排序错误");
printf("time:%lf\n",(double)cl/CLOCKS_PER_SEC); // 排序时间
free(datas);
return 0;
}
|
| 10分 |
“多一少一”问题占程序员常犯错误的10%以上!
避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个? |
|
什么叫做根据第三列数据排序?
|
|
|
确实hi下标的原因 汗
|
|