解题思路:所谓选择法就是将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);
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复