别看我只是一只羊


私信TA

用户名:bkwzsyzy

访问量:3695

签 名:

等  级
排  名 2249
经  验 2260
参赛次数 1
文章发表 23
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:


解题思路:

        ① 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分

13 人评分

  评论区

k有点多余了,用两个游标i,j就可以了
2023-04-28 09:57:15
从小到大排序的话,只需要找出后面最小值的index,然后和前面的互换
2022-10-27 11:30:26
  • «
  • 1
  • »