两个排序算法
好几天没写博客了,最近要考试了,有c语言。本来准备就为了应付考试,随便学一下的,然后准备下学期用c来学习数据结构和算法,可是,看了一些视频,就准备入坑c/c++了。。。。自己学了将近一个学期的c#,就这样放弃感觉还是有些小舍不得呢。。。不过,技术都是有共同性的,也不算是浪费时间了
然后贴代码:
1 int num[10]; 2 time_t tms; 3 srand((unsigned int)time(&tms));//生成种子 4 for (int i = 0; i < 10; i++)//生成数组元素为10 的数组 5 { 6 num[i] = 100 + rand() % 100; 7 printf("%d\n", num[i]); 8 } 9 10 11 //冒泡排序 12 for (int i = 0; i < 10 - 1; i++) 13 { 14 15 for (int j = 0; j < 10 - 1 - i; j++) 16 { 17 //int max=0;//num为下标 18 if (num[j]>num[j+1]) 19 { 20 int tmp = num[j]; 21 num[j] = num[j+1]; 22 num[j+1] = tmp; 23 } 24 } 25 }
1 int num[10]; 2 time_t tms; 3 srand((unsigned int)time(&tms));//生成种子 4 for (int i = 0; i < 10; i++)//生成数组元素为10 的数组 5 { 6 num[i] = 100 + rand() % 100; 7 printf("%d\n", num[i]); 8 } 9 10 11 //选择排序 12 for (int i = 0; i < 10; i++) 13 { 14 int max=0;//最大数的下标,开始默认为第一个数 15 for (int j = 0; j < 10 - i; j++) 16 { 17 18 if (num[max] < num[j]) 19 { 20 max = j; 21 } 22 } 23 24 int tmp = num[10 - 1 - i]; 25 num[10 - 1 - i] = num[max]; 26 num[max] = tmp; 27 28 }
上面就是冒泡排序和选择排序的实现代码了
冒泡排序呢,就是每一次都从头开始冒泡,选出大的那个,继续往后面冒,一轮下来,最大的就冒到最后面了,下一轮冒泡可以找到倒数第二大的数放在倒数第二的位置。。。。反复。。。。
选择排序呢,就是每一次都找出最大数的下标,然后将最大的数放到最后。
我个人认为,这两种排序方法本质上都是一样的,都是比较之后交换,冒泡交换的是数值本身,而选择交换的是数组的下标。
就纯int型数字数组来言的话,我觉得效率基本是一样的,因为数组的下标和数组中元素的sizeof都是一样的,是4个字节。
当然,这些都是我瞎想的,具体到底是怎样的,相信以后我学了数据结构和算法之后,能够得到正确的答案。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。