2007
06-14

#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]);}


好好的程序为何就是余兴不出结果,望各位大哥莅临指导。


就是想不通》有 9 条评论

  1. Control 说:

    你的程序中J没有初始化…

    程序也写的不太清楚.

    不知道你想做什么

    问题说明白了大家才可以帮你解决啊

  2. appleadionzm 说:

    同上楼,不知楼主想干吗?冒泡排序?那再嵌套一个循环就可以了

  3. 湛氏固企 说:

    此程序为:用排序法将十个数字按从小到大的顺序排序

  4. xstar 说:

    下面的代码有问题,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]

  5. mszhou 说:

    如果是想冒泡的话干嘛有continue;
    是什么意思?

  6. linder99 说:

    continue;是跳过循环体中continue后面的语句进行下次循环

  7. xstar 说:

    min = i的时候没必要交换(其实就是自己和自己交换)

    所以他加了个判断

  8. danzhi 说:

    我不知道为什么要把问题弄那么复杂,是为了记录下下标么,其实程序简化成

    #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的调用很乱  如果你想要确定下标的代码 我可以再给你写

     

  9. xstar 说:

    有时间的话可以看看这几种方法的速度如何!

    第一种,使用min,然后结束的时候比较min是否是当前元素,是则不交

    换,不是则交换。

    第二种,使用min,但结束的时候不比较min,始终交换。

    第三种,就是danzhi的方法,每得到一个最小的数据就交换。

留下一个回复