原题链接:[编程入门]选择排序
解题思路:
1、找出数组中最小的数和下标;
2、按照顺序进行交换;
3、遍历数组中所有的数。
如图:
| 4 a[0] | 5 a[1] | 6 a[2] | 3 a[3] | 2 a[4] | 1 a[5] | 0 a[6] | 9 a[7] | 8 a[8] | 7 a[9] |
说明:第一次遍历,从a[0]开始,找出最小的数0和他的下标a[6],比较后交换。
第二次遍历,从a[1]开始,找出最小的数1和他的下标a[5],比较后交换。
第三次遍历,从a[2]开始,找出最小的数2和他的下标a[4],比较后交换。
………………………………
涉及知识点:整型数组和整型数组的输入与输出、循环和循环嵌套、数组下标的使用。
代码如下:
#include<stdio.h> //头文件
#define s 10 //定义一个宏参数
int main()
{
int a[s]={4,5,6,3,2,1,0,9,8,7}; //初始化数组;
int i,j;
int b=-1; //用来获取数组中最小的数,初始化时尽量不要与数组中的数字重合。
int c=-1; //用来获取a[]数组中的下标。
int M; //交换时临时变量。
for(i=0;i<s;i++) //给数组赋于新值,获取新的十个数。
{
scanf("%d",&a[i]);
}
for(j=0;j<s;j++) // 外层循环,从a[0]开始遍历。
{
b=a[j];//初始化b的值。
for(i=j;i<s;i++) //找出数组中最小的数和它的下标。
{
if(b>a[i])
{
b=a[i];
c=i;
}
}
if(c!=-1)//交换最小的数,不等于-1是为了防止出现b<a[i]时,数据停止执行。
{
M=a[j];
a[j]=a[c];
a[c]=M;
}
c=-1; //遍历时,每遍历一次,将下标初始化,注意初始化时尽量不要与数组中的下标重合。
}
for(i=0;i<s;i++)//输出。
{
printf("%d\n",a[i]);
}
return 0;
}0.0分
9 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复