ʕ̢̣̣̣̣̩̩̩̩·͡˔·梦生 2021-07-18 17:11 采纳率: 83.3%
浏览 28
已结题

C语言选择排序法,解析每一行什么意思和思路讲解

原代码如下:


#include"stdio.h"

#define SIZE 10

main()
{int a[SIZE]={3,8,7,6,5,0,1,2,9,4};
int min,pos;
int i,j;
printf("数组中存放数据是:\n");
for(i=0;i<SIZE;i++)
printf("%d ",a[i]);
for(i=0;i<SIZE-1;i++)
{min=a[i];
pos=i;
for(j=i+1;j<SIZE;j++)
if(a[j]<min)
{min=a[j];
pos=j;
}
a[pos]=a[i];
a[i]=min;
printf("\n经过第%d次排序后,数组变为:\n",i+1);
for(j=0;j<SIZE;j++)
printf("%d ",a[j]);
}
}

运行结果如下:

数组中存放数据是:
3 8 7 6 5 0 1 2 9 4
经过第1次排序后,数组变为:
0 8 7 6 5 3 1 2 9 4
经过第2次排序后,数组变为:
0 1 7 6 5 3 8 2 9 4
经过第3次排序后,数组变为:
0 1 2 6 5 3 8 7 9 4
经过第4次排序后,数组变为:
0 1 2 3 5 6 8 7 9 4
经过第5次排序后,数组变为:
0 1 2 3 4 6 8 7 9 5
经过第6次排序后,数组变为:
0 1 2 3 4 5 8 7 9 6
经过第7次排序后,数组变为:
0 1 2 3 4 5 6 7 9 8
经过第8次排序后,数组变为:
0 1 2 3 4 5 6 7 9 8
经过第9次排序后,数组变为:
0 1 2 3 4 5 6 7 8 9
[Process completed - press Enter]
  • 写回答

1条回答 默认 最新

  • 醉酒梦天下 2021-07-19 20:28
    关注
    
    
    #include"stdio.h"//头文件
    #define SIZE 10//宏定义,SIZE=10
    main()//主函数
    {
        int a[SIZE]={3,8,7,6,5,0,1,2,9,4};//d定义数组,长度为SIZE,也就是10。注意数组的下标是从0开始的
        int minn,pos;//min是一个系统函数,尽量不要作变量名
        int i,j;//i和j可以不再循环外定义
        printf("数组中存放数据是:\n");
        for(i=0;i<SIZE;i++)//输出这个数组
            printf("%d ",a[i]);//以上应该不用多说
        for(i=0;i<SIZE-1;i++)//从第一个循环到倒数第二个
        {
            //首先要明白选择排序的工作原理(或者说是思路):
            //1、第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置;
            //2、然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾;
            //3、以此类推,直到全部待排序的数据元素的个数为零。
            minn=a[i];//让minn存放数组中的第一个元素,方便与后面的元素比较
            pos=i;//记录最小值的下标
            for(j=i+1;j<SIZE;j++)//从第i+1个往后循环
            //从i+1开始的原因:第i个元素不需要与自己比较
                if(a[j]<minn)//发现一个元素比当前最小值小
                {
                    minn=a[j];//更新最小值
                    pos=j;//记录下标
                }
            a[pos]=a[i];//把最小值与第i个交换
            a[i]=minn;//让第i个数成为包含它的剩下的数中的最小值
            printf("\n经过第%d次排序后,数组变为:\n",i+1);//因为i是从0开始的,所以要输出i+1
            for(j=0;j<SIZE;j++)
                printf("%d ",a[j]);//输出排序后的数组
        }
        return 0;//结束。要养成加return 0的好习惯(别问我为什么)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月17日
  • 已采纳回答 8月9日
  • 创建了问题 7月18日