十大排序算法第一节——选择排序
复制代码直接滑到最后!!!
选择排序就是找到(最大或者)最小元素,放到最开始的位置,然后就是在没有排序的序列中找到最小的排在已经排好的序列之后,直至没有排数列排完。(自己的理解)
大概解释代码其中的细节:第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 }
第一次写博客有点紧张,如果有错误的地方,莫怪!!!跪谢!!!希望大牛可以指导!!!
标签:十大,int,用法,算法,sizeof,排序,赋值 From: https://www.cnblogs.com/H418/p/17338423.html