冒泡排序解读
冒泡排序
说起冒泡排序大家肯定都不陌生,今天就带大家来解读下它究竟是怎样实现的,它的原理又是什么以及怎样去充分理解它。
冒泡排序的作用简单明了就是排序,下面我们来手写一个冒泡排序实现数组从小到大排列。
写之前我们得先想想怎么实现?
1.比较前后项的值,大于则调换两者位置
2.比较次数的考虑 怎样比较才能让数组里的所有值都进行了比较
3.怎么过滤掉不必要的比较
我们可以这样想 我们分为两次循环嵌套实现
第一次循环的目的是排布好的次数 比如有5个值 那么我们只需要排布好4个值那么就排布好了,最后一个值已经是正确位置了。
第二次循环的目的是每一次循环都能排布好本次需要的最大值放到对应的位置 举个例子,第一次比较出最大值输送至数组最后一位,需要执行length-1 因为要比较数组内所有值。 第二次比较输出第二大值至数组倒数第二位,那么它需要比较的是length-2次,因为比较要除掉之前的最大值,即数组最后一位不比较,以此类推,最后就能得到我们想要的从小到大排序。
那么我们可以这样写:
我们去看看后台输出的结果是不是我们想要的 1 4 6 8
果不其然成功了
现在让我们来解读下究竟是怎样实现的
数组 [6,4,8,1]
第一次外部循环 即 i 为0是 数组的改变我们来看看
执行次数length-i 即为 4-1 = 3次 j的值为 0 1 2
第一次比较0 1 调换位置
第二次比较 1 2 不变
第三次比较 2 3 调换位置
得到该数组最大值为 8 放置于数组最后一位
i | j | 数组 |
---|---|---|
0 | 0 | 4 6 8 1 |
0 | 1 | 4 6 8 1 |
0 | 2 | 4 6 1 8 |
第二次外部循环 即i 为1
就不详细解释了,和上面一样
得到第二大值为 6 放置为数组倒数第二位
i | j | 数组 |
---|---|---|
1 | 0 | 4 6 1 8 |
1 | 1 | 4 1 6 8 |
第二次外部循环 即i 为2
就不详细解释了,和上面一样
得到第二大值为 4 放置为数组倒数第三位
i | j | 数组 |
---|---|---|
2 | 0 | 1 4 6 8 |
比较四位数组我们排布好3位正确的值,那么现在得到的 1 4 6 8 就是我们想要的正确答案
你学废了吗?哈哈~
是不是so easy?