解题思路:选择法排序就是先拿出一个第一个数,将它和后边的数逐一比较,并将最小数的位置更新为第一个位置,第一遍排序完成之后,再用第二个位置的数去和后面的数比较,选出最小的数并将位置更新为第二个位置,以此类推,直到全部完成,由于最后一个数不用再单独拿出进行比较,所以最外层循环为N-1次。内层代码依次进行比较,并将k更新为较小数的下标,如果k的位置就是所拿出数的位置,即a[i]=a[k],说明此时所拿出的i与后面的数相比,就是最小的,不用调换位置;反之,如果此时k的位置不是所拿出的数的位置,则需要进行两数交换,反复进行上述步骤直达全部的数都被排列好。
注意事项:由于测试程序时需反复输入,比较麻烦,本代码引入rand函数,随机生成十个数,将他们显示出来并进行排序,注意要在头文件中包含time库,使用宏定义是程序更具有更强的适应性(如代码1所示),代码2为需手动输入的题解,循环嵌套一定要看清循环的变量,不然就会和我一样纠结半天。以上是写题目的一些总结,希望对大家有帮助。
参考代码:

代码1:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define N 10

int main()

{

    int i,j,k,temp;

    int a[N];

    //printf("ENTER:\n");

    //srand(time(NULL));

    for(int i=0;i<N;i++)

    {

        //a[i]=rand()%100;

        scanf("%d",&a[i]);

    }

    //for(i=0;i<N;i++)

        //printf("%d ",a[i]);

    for(i=0;i<N-1;i++)

    {

        k=i;

        for(j=i+1;j<N;j++)

            if(a[j]<a[k])k=j;

            if(k!=j)

            {

                temp=a[k];

                a[k]=a[i];

                a[i]=temp;

            }


    }

        //putchar('\n');

        for(i=0;i<N;i++)

            printf("%d\n",a[i]);

    return 0;

}


代码2:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define N 10

int main()

{

    int i,j,k,temp;

    int a[N];

    for(int i=0;i<N;i++)

    {

        scanf("%d",&a[i]);

    }

    for(i=0;i<N-1;i++)

    {

        k=i;

        for(j=i+1;j<N;j++)

            if(a[j]<a[k])

             k=j;

            if(k!=j)

            {

                temp=a[k];

                a[k]=a[i];

                a[i]=temp;

            }


    }

        for(i=0;i<N;i++)

            printf("%d\n",a[i]);

    return 0;

}




点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论