#include<stdio.h>
main()
{
int i,j,min,temp;
int a[10];
for(i=0;i<=9;i++)
scanf(“%d”,&a[i]);
for(i=0;i<=9;i++)
{min=i;
for(j=i+1;j<=9;j++)
{if(a[j]<=a[min])
min=j;
}
if(min==i)
continue;
temp=a[i];
a[i]=a[j];
a[j]=temp;}
for(i=0;i<=9;i++)
printf(“%d\n”,a[i]);}
好好的程序为何就是余兴不出结果,望各位大哥莅临指导。
>> 本文固定链接: http://www.vcgood.com/archives/1592
你的程序中J没有初始化…
程序也写的不太清楚.
不知道你想做什么
问题说明白了大家才可以帮你解决啊
同上楼,不知楼主想干吗?冒泡排序?那再嵌套一个循环就可以了
此程序为:用排序法将十个数字按从小到大的顺序排序
下面的代码有问题,min保存了最小的那个数的下标,j是循环变量,每次都是10;
[code]
temp=a[i];
a[i]=a[j];
a[j]=temp;
[/code]
改为:
[code]
temp=a[i];
a[i]=a[min];
a[min]=temp;
[/code]
如果是想冒泡的话干嘛有continue;
是什么意思?
continue;是跳过循环体中continue后面的语句进行下次循环
min = i的时候没必要交换(其实就是自己和自己交换)
所以他加了个判断
我不知道为什么要把问题弄那么复杂,是为了记录下下标么,其实程序简化成
#include<stdio.h>
main()
{
int i,j,min,temp;
int a[10];
for(i=0;i<=9;i++)
scanf(“%d”,&a[i]);
for(i=0;i<=9;i++)
for(j=i+1;j<=9;j++)
if(a[j]<a[i])
{temp=a[i];
a[i]=a[j];
a[j]=temp;}
for(i=0;i<=9;i++)
printf(“%d\n”,a[i]);
}
就可以了
你的程序对MIN的调用很乱 如果你想要确定下标的代码 我可以再给你写
有时间的话可以看看这几种方法的速度如何!
第一种,使用min,然后结束的时候比较min是否是当前元素,是则不交
换,不是则交换。
第二种,使用min,但结束的时候不比较min,始终交换。
第三种,就是danzhi的方法,每得到一个最小的数据就交换。