美文网首页
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