排序算法(更新ing)(C语言实现)(认真的不像实力派)

举报
李锐博恩 发表于 2021/07/15 08:39:43 2021/07/15
【摘要】 为什么要总结排序算法: 由于时而要用到排序的思想,这里慢慢总结吧,以前也看的不少,但是荒废久了,也就忘得差不多了,这里贴出供需要的人看吧。互联网虽好,但有时候资源良莠不齐,看的也是头疼,不如总结来供自己查阅。 定位:排序是一种重要的,基本的算法。 1、冒泡(起泡)法排序(2018/06/04 pm 17:20): 基本思路:每次将相邻的两个数比较,将小的调到前头。若有6个数:...

为什么要总结排序算法:

由于时而要用到排序的思想,这里慢慢总结吧,以前也看的不少,但是荒废久了,也就忘得差不多了,这里贴出供需要的人看吧。互联网虽好,但有时候资源良莠不齐,看的也是头疼,不如总结来供自己查阅。

定位:排序是一种重要的,基本的算法。

1、冒泡(起泡)法排序(2018/06/04 pm 17:20):

基本思路:每次将相邻的两个数比较,将小的调到前头。若有6个数:9    8    5    4    2    0;比较过程如下图:

第一趟比较:

9


8

8

8

8

8

8

9


5

5

5

5

5

5

9


4

4

4

4

4

4

9


2

2

2

2

2

2

9


0

0

0

0

0

0

9

第1次

第2次

第3次

第4次

第5次

结果

第1次:先将最前面的两个数(8和9)比较大小,小的浮上去,大的沉下去;

第2次:将第2和第3个数(9和5)比较,同理,小的浮上去,大的沉下去;

如此进行5次,得到8  5  4  2  0  9 的顺序,可以看到最大的数9已经“沉底”。其他数各自向上浮起一个位置。

第二趟:

8


5

5

5

5

5

8


4

4

4

4

4

8


2

2

2

2

2

8


0

0

0

0

0

8

第1次

第2次

第3次

第4次

结果

然后进行第2趟比较,对余下的5个数(8 5 4 2 0)进行新一轮的比较,以便使次大的数“沉底”。

方法同第1趟,如上表示,经过4次比较,得到次大的数8。

规律总结:

按如此规律进行下去,可以推知,对6个数进行冒泡排序,要比较5趟,才能使6个数按大小排序。

在第1趟要进行两个数之间的比较共5次,在第2趟过程中比较4次,..........,在第5趟只需比较1次。

规律升华:

如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。

下面给出简单c程序:


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[10]; //此数组用于存放输入数据
  5. int i, j; //循环变量
  6. int t; //中间变量
  7. printf("input 10 numbles:\n"); //输入数据提示
  8. for(i = 0; i < 10; i ++)
  9. scanf("%d", &a[i]);
  10. printf("\n");
  11. //冒泡排序部分
  12. for(j = 0; j < 9; j ++) //进行9次循环,实现9趟比较
  13. for(i = 0; i < 9 - j; i ++) //在每一趟中进行 9 - j 次比较
  14. if(a[i] > a[i + 1])
  15. {
  16. t = a[i];
  17. a[i] = a[i + 1];
  18. a[i + 1] = t;
  19. }
  20. printf("the sorted numbers:\n");//排序输出
  21. for(i = 0; i < 10; i ++)
  22. printf("%d ", a[i]);
  23. printf("\n");
  24. return 0;
  25. }

Code::Blocks中运行结果如下:

input 10 numbles:




12  15  15  21  25  36  45  52  52  61

持续更新中......



关于排序的好文推荐

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/80569489

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。