学习十大排序算法(1)——选择排序【实现方法c语言】

发布时间 2023-04-20 21:29:09作者: bug大佬

十大排序算法第一节——选择排序

  复制代码直接滑到最后!!!

  选择排序就是找到(最大或者)最小元素,放到最开始的位置,然后就是在没有排序的序列中找到最小的排在已经排好的序列之后,直至没有排数列排完。(自己的理解)

  大概解释代码其中的细节:第6行中的sizeof的用法是求出括号里面的所占的字节数,比如sizeof(a),a数组是int型,所占四个字节,但a是数组,其中包括九个元素,所以sizeof(a)的值为4*9 = 36,同理sizeof(a[0]) =  4;在此处,我刚开始学习的时候,使用的不是sizeof,而是strlen,上网百度之后才知道,strlen适用于定义char的东东,其他内容可以自己去看下面的知识,关于sizeof的用法链接放下面,回归正题,说远了。

 (4条消息) C语言中的sizeof的用法详解_sizeof在c语言中的用法_shanweikezhang的博客-CSDN博客

  然后就是算法的思想,简单来说,就是找到数组a中的最小元素,然后放到最前面,依次做下去,代码来说就是先将a[i] 赋值给最小值min,然后和a[i]后面的元素a[j]进行比较,如果后面a[j]比前面的a[i]小,那么,就将a[j]的值赋值给临时变量temp,然后将a[i]的值赋值给a[j],然后将temp的值赋值给a[i],完成位置的转换,也就是将最小的放在了最起前面,最后将a[j]的值赋值给min,(前面判断出a[j]<min)后面就是打印出排好序的序列,剩下的不难理解,不做解释,如果实在理解不了,可以私信或者@我,我们再讨论。

  运行结果如图:

 

  废话不多说,直接上完整代码:

 

 1 //选择排序 
 2 #include <stdio.h>
 3 
 4 int main(){
 5     int a[] = {2,5,8,3,1,9,4,6,7};
 6     int b = sizeof(a)/sizeof(a[0]);//sizeof(a) = 36,sizeof(a[0]) = 4;求出的是所占的字节; 
 7     printf("%d\n",b);
 8     printf("排序前:");
 9     for(int i = 0;i<b;i++){
10         printf("%d",a[i]);
11     }
12     printf("\n");
13     int min;
14     printf("排序后:");
15     for(int i = 0;i<b;i++){
16         for(int j = i;j<b;j++){
17             min = a[i];
18             if(a[j]<min){
19                 int temp = a[j];
20                 a[j] = a[i];
21                 a[i] = temp;
22             }
23             min = a[j];
24         }    
25         printf("%d",a[i]);    
26     }
27     return 0;
28 }

  第一次写博客有点紧张,如果有错误的地方,莫怪!!!跪谢!!!希望大牛可以指导!!!