解题思路:选择法排序就是先拿出一个第一个数,将它和后边的数逐一比较,并将最小数的位置更新为第一个位置,第一遍排序完成之后,再用第二个位置的数去和后面的数比较,选出最小的数并将位置更新为第二个位置,以此类推,直到全部完成,由于最后一个数不用再单独拿出进行比较,所以最外层循环为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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复