开发者社区 问答 正文

6 在计算机二级c语言中 什么是选择排序法?

6 在计算机二级c语言中 什么是选择排序法?

展开
收起
知与谁同 2018-07-17 10:48:48 1660 分享 版权
2 条回答
写回答
取消 提交回答
  • 举个例子 从小到大, 每次从剩下的数字中选出最小的 。
    2019-07-17 22:49:48
    赞同 展开评论
  • Nothing for nothing.

      算法要求:用选择法对10个整数按降序排序。

        算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。

        算法源代码: # include <stdio.h>
    main()
    {
      int a[10],i,j,k,t,n=10;
      printf("Please input 10numbers:");
      for(i=0;i<10;i++)
       scanf("%d",&a[i]);
      for(i=0;i<n-1;i++)     /*外循环控制趟数,n个数选n-1趟*/
      {
        k=i;               /*假设当前趟的第一个数为最值,记在k中 */
        for(j=i+1;j<n;j++)   /*从下一个数到最后一个数之间找最值*/
          if(a[k]<a[j])     /*若其后有比最值更大的*/
            k=j;           /*则将其下标记在k中*/
        if(k!=i)                     /*若k不为最初的i值,说明在其后找到比其更大的数*/
        {  t=a[k];  a[k]=a[i]; a[i]=t;  } /*则交换最值和当前序列的第一个数*/
      }
      printf("The sortednumbers: ");
      for(i=0;i<10;i++)
        printf("%d   ",a[i]);
      printf("\n");
    }

      算法特点:每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。

      算法分析:定义外部n-1次循环,假设第一个为最值,放在参数中,在从下一个数以后找最值若后面有比前面假设的最值更大的就放在k中,然后在对k进行分析。若k部位最初的i值。也就是假设的i不是最值,那么就交换最值和当前序列的第一个数

    2019-07-17 22:49:48
    赞同 展开评论