解题思路:所谓选择法就是将n个数中最小的数与a[0]对换;再将a[1]-a[n]中最小的数与a[1]对换......没比较一轮,找出一个未经排序的数中最小的一个,共比较n-1轮,下面以5个数为例说明选择排序法的步骤:

a[0] a[1] a[2] a[3] a[4] 
3    6    1    9    4

1    6    3    9    4

1    3    6    9    4

1    3    4    9    6

1    3    4    6    9


注意事项:

参考代码:

#include<stdio.h>

int main()

{

    void choosesort(int *a,int n);   //函数声明

    void output(int *a,int n);      //函数声明

    int n,a[1000];     //本题要求n不小于1000,数组上限达不到容易运行出错

    int i;

    scanf("%d",&n);

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

    {

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

    }

    choosesort(a,n);     //调用排序函数

    output(a,n);      //调用输出函数

    return 0;

}

void choosesort(int *a,int n)   //选择排序算法,接受用指针或数组a[]

{

    int i,j,k,t;

    for(i=0;i<n-1;i++)        //n个数排序一共比较n-1趟

    {

        k=i;                  //记录每行的首元素

        for(j=i+1;j<n;j++)    //每少一趟,少比较一个数,所以从i+1开始

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

                k=j;         //标记出剩余元素中的最小值

        t=a[k];a[k]=a[i];a[i]=t;  //将标记的值与首元素进行互换

    }

}

void output(int *a,int n)     //输出排好序的数组(指针法效率更高)

{

    int *p;

    for(p=a;p<a+n;p++)

        printf("%d ",*p);

}


点赞(1)
 

0.0分

2 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论