C++数组排序问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 05:31:28
为什么 不能排序

#include <stdio.h>
int main()
{
int i;
int a[10];
int o,p,q;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
if (a[i]<a[++i])
{
o=a[i];
a[i]=a[++i];
a[++i]=o;
}
}
for(i=0;i<10;i++)
printf("%d",a[i]);
}
那该怎么 做 出 把 1-10个数 从 10-1呢?

楼主把++用错了,经过一次++i之后,i本身的值就会增加1的。
for(i=0;i<10;i++)
{
if (a[i]<a[++i])
{
o=a[i];
a[i]=a[++i];
a[++i]=o;
}
}
在这段程序中,我们以i=0为例。
当经过if判断后,a[0]<a[++0];即a[0]<a[1];
但是此时,i的值却已经变为1了。
后面o=a[i],却变为:o=a[1]。
后面a[i]=a[++i]变为a[1]=a[++1]即,a[1]=a[2];此时,i=2.
再后面a[++i]=o;变为:a[++2]=o,即a[3]=o;此时,i=3.
最后,i在执行i++操作,此时i=4;再进入下一轮循环。
最终使i=8时进入第三次循环,异常退出,将缓存中对数组的操作清空,回复为原数据。
如果lz想要用冒泡法排序可用以下代码。
#include <stdio.h>
int main()
{
int i,j;
int a[10];
int o;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
for(j=0;j<9-i;j++)
{
if (a[j]<a[j+1])
{
o=a[j];
a[j]=a[j+1];
a[j+1]=o;
}
}
for(i=0;i<10;i++)
printf("%d\t",a[i]);
return 0;
}

问题所在:if (a[i]<a[++i])
{
o=a[i];
a[i]=a[++i];
a[++i]=o