捡起两个简单的小算法——冒泡法排序和选择法排序

                                                     算法小白的算法之路,从最简单的下面两个算法开始。

1.冒泡法算法

  1.  思路:
  • 从第一个数开始,前面的数和后面相邻的数比较大小,若前一个大于后一个,则置换这两个位置的值。举个栗子,9、8、5、4、2、0一共六个数,第一次要置换9和8,变成8、9、5、4、2、0,第二次作比较的是9和5,毋庸置疑,需要置换,一趟比较下来,9这个最大值会沉到数列的最后面,恭喜,数列已经变成部分有序的了。
  • 一趟可以找到一个最大值(除开之前找到的最大值,故称剩下的序列中的最大值),n个数,需要n-1趟找到n-1个最大值。每一趟需要比较n-j,j为第几趟。因为随着走的趟数的增长,序列后面都是有序的,不需要再参与比较。
  • 冒泡法的名字的来由:每经过一趟的比较和交换,最小的数会“上升”或“左移”一位,最后升到第一个数。这如同水低的气泡逐步冒出水面一样,所以叫冒泡法。

    2.动画演示

冒泡法

   3.程序代码

2.选择法排序

1.思路:

  • 默认最小值的下标index为趟数-1,因为下标从0开始。
  • 从第一个数开始,前面的数和后面相邻的数比较大小,若前一个大于后一个,则代表最小值下标的index值改为较小值的下标,一趟下来,index存储着最小值的下标。
  • 根据index获取最小值与前面第i个数置换,i=趟数-1
  • n个数需要找到n-1个最小值,故需要走n-1趟,每趟的第一个数为上一趟的最小值后面的第一个数。

2.动画演示

3.程序代码

3.格式化输出

  要求是输出排序后的序列为数字空格数字空格,但最后一个数字后面没有空格。

  有很多方法解决,比如判断是不是最后一个数字的输出,最后一个数字不输出空格。其实我们可以换一个角度看问题,其实序列是空格数字的组合,只有第一个数字前面没有空格。这种角度的解决方法:设置一个flag标志=1,程序进入输出代码块,就判断flag是不是等于1,若是,赋值为0,输出不带空格的数字。数组元素循环输出时,由于flag=0,只能进入空格数字的输出模式。

 程序代码:

4.致谢

 谢谢看到了最后,博客断更了半年,这是2019年的第一篇博客,希望这篇博客能带给你一些收获,喜欢希望能点个赞。

 本文动图借鉴了该博客图片https://blog.csdn.net/weixin_40205234/article/details/86699088

猜你喜欢

转载自blog.csdn.net/m0_37166734/article/details/88601556
今日推荐