冒泡排序与选择排序

  hello,小伙伴们大家好,新开的《董小姐花痴记》系列从今天开始就正式登场和大家见面啦~主要讲算法知识,而之前的《邓哥奇遇记》系列主要讲网络知识,不过大家不用担心,《邓哥奇遇记》系列没有停止,还会继续更新哦~

  排序是算法的世界里最基础的问题,而冒泡排序和选择排序是排序算法里最简单的排序算法~很多同学经常弄混两种排序,今天我们就来详细探究冒泡排序和选择排序的区别~

  在文章开篇之前,我们还是用一句话来描述冒泡排序和选择排序的精髓,那就是:排序 = 算法 + 比较 + 交换(此公式针对冒泡和选择)

  通过之前的文章,大家肯定对邓哥的“浪”已经很熟悉了。那么今天我们来聊聊我们董小姐的习性~董小姐没有邓哥抽烟、喝酒、烫头、浪那么多的属性。董小姐就两个特性,逛~痴~逛~痴~,逛街和犯花痴~董小姐经常逛着街,看到小哥哥就走不动道了~

  有一天,大家组团去逛商场,走到商场门口时,董小姐忽然止步不走了,顺着董小姐的目光望去,不远处立着彭于晏、胡歌、李易峰、刘昊然的宣传海报。

  我们知道董小姐的花痴病又犯了。董小姐要给他们按照帅的程度排完序再走。我们的心里此时是崩溃的。这时邓哥却主动请缨,站到了海报一侧,要求参与排序。我们的心情瞬间从崩溃转化为对邓哥的怜悯。

  排序之前,董小姐先给每个人的颜值进行打分,彭于晏:98分、胡歌:99分、李易峰:98分、刘昊然:97分、邓哥:2分。

  董小姐要对颜值从低到高进行排序。

  在笔面试时,一定要看好是从小到大还是从大到小排序。这时我们得到了一个数组[98, 99, 98, 97, 2];

  在正式进行排序之前,我们要先做好我们的排序工具。在文章最开始我们就给出了公式:排序 = 算法 + 比较 + 交换。

  这里的算法自然指的是冒泡和选择,那么比较和交换是什么鬼?

  比较和交换是两个基本方法。

  比较的作用是:比较两个数,给出是否需要交换。而交换的作用是:要将两个数进行换位。我们先写出比较函数和交换函数

  我们先来看比较函数:

  因为是从小到大排序,所以如果a≤b就不用交换了~否则就是a>b,那么就需要将a和b的位置进行交换,就要返回true。

  然后我们再来看交换函数:

  这里的indexA指的是a的位置,indexB指的是b的位置。这时计算机中,最常见的通过第三个变量实现a和b数值互换的写法。

  有了这两个函数之后,我们就可以开始进行排序啦~

  1率先出场的是冒泡排序:

  无论是选择还是冒泡,每一轮都是要找到当前最大的那个数。冒泡排序我用一句话来形容就是:过五关,斩六将。

  为什么用一个词形容冒泡排序是过五关斩六将呢?是因为一个数,要想从第一个位置走到最后的位置,需要进行多轮的比拼(比较)和厮杀(交换)才能走到最后,而且每次比较都可能进行交换。

  我们来看一下冒泡排序的写法:

  2其次出场的是选择排序:

  选择排序我用一句话来形容就是:选出一个数,扔到后面去。我们可以通过下面的代码看出,选择排序就是每一轮,选出一个最大的数,交换到最后面。

  3最后我们来对比一下选择和冒泡:

  冒泡排序:比较一下交换一下。

  选择排序:比较一下记录一下,比较一圈交换一下。

  冒泡排序强调两个数之间的相对位置,所以数组越是有序的,冒泡排序的交换次数就会越少。

  选择排序强调每个数的绝对位置,所以无论数组是什么样,耗时都基本相同。

  在董小姐对诸位帅哥排序之后,董小姐得到了自己满意的序列:胡歌,彭于晏,李易峰,刘昊然,邓哥。

  我们恭喜邓哥,以97分的微弱劣势与此次“选帅”的第一名失之交臂

你可能感兴趣的:(冒泡排序与选择排序)