美文网首页
c语言 选择排序

c语言 选择排序

作者: Riya | 来源:发表于2017-12-09 11:08 被阅读16次

    选择排序每一趟都要找到该趟比较的数中最小的那个数。
    关键(假设十个数为9 8 7 4 5 6 1 2 3 0):

    for (i=0;i<9;i++)               //以下以第一趟为例,十个数要循环九趟
    {
      min=i;                      //假设i=0为最小数,即a[min]=9
      for(j=i+1;j<10;j++)        //从第二个数开始和第一个数比较
      {                          //j=1,a[j]=8
        if(a[min]>a[j])          //因为9>8
        {
          min=j;                //所以min=1,a[min]=8,此时j=1<10,所以j++,即j=2,a[j]=7
        }                       //然后又将新的a[min]和新的a[j]比
      }                         //以此类推,当第二个for循环第一次结束时就找到了第一轮中的最小值
      if(min!=i)                //并通过if语句将每一轮找到的最小值按顺序排好
      {                         //并且如果刚好定义的最小值是我们要找的该轮最小值,
        t=a[min];              //那么就不进行交换,如果不是,则交换
        a[min]=a[i];
        a[i]=t;
      }
    }
    

    完整代码:

    #include<stdio.h>
    int main()
    {
       int i,j,t,min,a[10];
       for(i=0;i<10;i++)
        {
          scanf("%d",&a[i]);
        }
        for(i=0;i<9;i++)
       {
           min=i;
           for(j=i+1;j<10;j++)
           {
                if(a[min]>a[j])
                  {
                    min=j;
                  }  
            }
            if(min!=i)
                {
                    t=a[min];
                    a[min]=a[i]; // 此处要十分注意,a[min]是和a[i]交换位置而不是和a[j]交换位置
                    a[i]=t;      //这样才能让每一轮的最小按顺序排好
               }                //好要注意应该在选出每一轮最小值后再进行交换
        }
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:c语言 选择排序

          本文链接:https://www.haomeiwen.com/subject/rqjuixtx.html