关于网友提出的“ 一个简单的排序程序,帮我看看”问题疑问,本网通过在网上对“ 一个简单的排序程序,帮我看看”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 一个简单的排序程序,帮我看看
描述: 实现把数组内容从小到大排序:
#include
void main()
{
int a[8];
cout<<"input the ten numbers:"<<>
for(int i=0;i<=7;i++)
{
cin>>a[i];
}
cout<<"the order after calculated is:"<<>
for(i=1;i<=7;i++)
{
int temp=a[i];
for(int j=i-1;j>=0;j--)
{
if(temp<>
else break;//去掉之后为什么就运行不正确了呢?
}
a[j+1]=temp;
}
for(i=0;i<=7;i++)
{
cout<<>
}
cout<<>
}
我的问题是为什么去掉else break;就运行不正确了呢?理论上来说,如果我把它去掉之后if后面的条件不成立,会接着判断for循环后面的j>=0这个条件,然后继续执行,直到j=0之后,觉得加上else语句之后是很好,但是我也认为不加也可以啊,怎么就运行错误了呢?是不是有什么我没有注意到呢?
解决方案1: for(int j=i-1;j>=0;j--)
{
if(temp <>
else break;//去掉之后为什么就运行不正确了呢?
}
a[j+1]=temp;
如果else break;不加,那么不管怎么样,内嵌的循环总归要执行,那么最后j=0,a[j+1]即a[1]=temp肯定要执行,结果a[1]肯定等于排序之前a[7]的数值,同意19楼说法
解决方案2: to 17楼,感觉这个排序是逐步的,当到j时,位置a[0]到a[j]已经从小到大排好序了。
所以不加else break,if(temp < a[j])假的话,会继续执行j--,那么temp>a[j]是必然,所以继续循环下去也不会出错。
还是不明白原因,请楼主指教
解决方案3: 晕,问题的关键在这里
for(int j=i-1;j>=0;j--)
{
if(temp <>
else break;//去掉之后为什么就运行不正确了呢?
}
a[j+1]=temp;
你的算法属于插入排序了……
如果不跳出循环,j不会固定在正确的位置上……
解决方案4: 不加else break,if(temp < a[j])假的话,会继续执行j--,继续来判断(temp < a[j]),那你后边的a[j+1] = temp;就赋值乱了,出来的结果可能都不是你输入的数组值
以上介绍了“ 一个简单的排序程序,帮我看看”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2921249.html