C语言,sort函数的一点疑问。

发布网友 发布时间:2022-04-24 09:06

我来回答

3个回答

热心网友 时间:2022-04-03 11:03

sort是排序吧。程序错误有三:
1. b=x-1 是错的,因为x和b一样表示数组的长度,注意,长度和最后一个下标相差一,但是在for里面采用诸如for(int m=0;m<b;m++),m的循环是从0到b-1的,所以,没有必要-1,这里注意那个for里面的m<b的小于号而不是小于等于
由于这个问题,b错误的减少了1,所以输入的数组实际只有2个数
2. 双重for循环里面二个for有问题
这里,要清楚 i 和 j 的具体含义。i 之所以从1开始,就是因为要防止j+1弄到数组外面去,而且这里有个问题是,需要不断扩大“已排序”的部分。即i=1时排好前两个数,i=2时,把第三个数纳入到“已排序”的队列里面,此时注意,前面排好的就不必排了,所以,j 循环的时候是从后面开始循环的!
两个for可以这么写:
for (i = 1; i < d; i++)

for (j = i; j >=0; j--)

……

或者
for (i = d-2; i >= 0; i--)

for (j = i; j < d-1; j ++)

……

3. 一点建议,输入和输出数组以及排序分开,不要放一起,不容易读懂程序。
sort函数写得有点乱,这是非常不好的。
比如,输入数组的部分一个函数,输出又是一个函数,跳过排序,直接输出就知道输入有没有问题了,这样的结构性问题比真正的错误还要致命,因为无法迅速查找错误,而错误是不可能避免的!

热心网友 时间:2022-04-03 12:21

都是临界条件的问题。
1.
for(int k=0;k<b;k++)
scanf("%d ",&array[k]);

应该改成k<=b, 因为你之前给把x-1赋给b而不是x
2.两个for语句这样才对:
for(int i=1;i<=b;i++)
for(int j=0;j<=b-i;j++)
还是老问题,b = x-1.。
3. 为什么要把没初始化的b传给sort函数呢?

哦对了补充一点,你的sanf中%d后面不该有空格!这点很重要!

热心网友 时间:2022-04-03 13:56

调试一下便知。这种问题,一调试一下就看出毛病来了追问讲调试时没有听- - 现在后悔来不及啊。要赶上的东西太多了。

追答vc下(其他visual stdio 同样),按f10进入调试状态,f10是单步行进,一行代码就是一步,然后在右下角找一个窗口,那里面有这行代码的变量值。细细查看就能找到出错原因了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com