解题思路:

        ① i用于记录要排序的数

        ②k用于记录该趟最小的数,j用于记录寻找最小的数遍历位置。

            当a[k]>a[j],即k=j,

            若此时j已遍历完,则a[k]为最小值,

            若j没有遍历完,则继续遍历,寻找比a[k]更小的值,并k=j;

        ③寻找完毕后,将最小值a[k]与a[i]交换;

例如:

 4   85   3   234   45   345   345   122   30   12

i,k   j         //进行第i=0轮循环;


4   85   3   234   45   345   345   122   30   12

i          k,j       //此时a[k]>a[j],即k=j;


4   85   3   234   45   345   345   122   30   12

i           k      j       //j继续寻找后面是否存在比a[k]更小的数;


4   85   3   234   45   345   345   122   30   12

i           k                                                       j       //遍历后,未发现a[k]>a[j],即a[k]为该趟最小值;

 

3   85   4   234   45   345   345   122   30   12

k           i                                                       j       //a[k]与a[i]交换;



3   4   85   234   45   345   345   122   30   12

          i,k     j                                  //进行第i=2轮循环;


3   4   85   234   45   345   345   122   30   12

          i               k,j                           //此时a[k]>a[j],将k=j;


3   4   85   234   45   345   345   122   30   12

          i               k                                  j          //j继续寻找后面,存在比a[k]更小的数;


3   4   85   234   45   345   345   122   30   12

          i                                                 k,j           //此时a[k]>a[j],即k=j;


3   4   85   234   45   345   345   122   30   12

          i                                                 k       j     //j继续寻找后面,存在比a[k]更小的数;


3   4   85   234   45   345   345   122   30   12

           i                                                      k,j      //此时a[k]>a[j],即k=j;


3   4   12   234   45   345   345   122   30   85

          a[k]                                                 a[i]  //a[k]与a[i]交换;


注意事项:

① selectsort(int a[],int n)函数中不要随意加括号,排序会出错

②可以在main函数中改写输入长度为n的数组

参考代码:

#include<stdio.h>
void selectsort(int a[],int n);
int main()
{
	int a[10];
	
	for(int i=0;i<10;i++)scanf("%d",&a[i]);
//	for(int i=0;i<10;i++)printf("\n%d",a[i]);
	selectsort(a,10);
	for(int i=0;i<10;i++)printf("%d\n",a[i]);
	
}


void selectsort(int a[],int n){
     for(int i=0;i<10;i++){
        int k=i;
   
        for(int j=i+1;j<10;j++)
          
            if(a[j]<a[k])
                k=j;       
                int x=a[i];
                a[i]=a[k];
                a[k]=x;    
       
    }
}


点赞(0)
 

0.0分

5 人评分

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

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

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

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

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

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

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

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

评论列表 共有 2 条评论

zyliang 1年前 回复TA
k有点多余了,用两个游标i,j就可以了
Joker 2年前 回复TA
从小到大排序的话,只需要找出后面最小值的index,然后和前面的互换