原题链接:[编程入门]选择排序
解题思路:
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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复