vlambda博客
学习文章列表

七大排序——冒泡排序

    排序算法是面试中最常考的内容,而冒泡排序则是其中最基础的部分。




冒泡排序



基本原理

两两相邻

不停比较

不停交换

从第一个数开始,依次与自己的后一个数相比较,满足交换条件(大于或者等于)则交换,依次类推。把极值(最大或者最小)放到最后(或最前)去。


关键逻辑

循环n次

有几个数就比较多少轮

七大排序——冒泡排序两两比较

当前的数与下一个数比较

七大排序——冒泡排序

两两交换 

满足条件则交换位置

七大排序——冒泡排序


标准实现

七大排序——冒泡排序

排序结果

七大排序——冒泡排序


逻辑分析

为什么有

两层循环嵌套

第一层

七大排序——冒泡排序

决定排序轮数


第二层

七大排序——冒泡排序

用于一轮之中的两两比较

七大排序——冒泡排序


为什么要Length-1-i

减 1 的原因

七大排序——冒泡排序

前一个和后一个比

也就是第 j 个和第 j+1 个比

遍历到最后一个会报错

所以减 1


减 i 的原因

七大排序——冒泡排序

i 是轮次数

每进行一轮就会把一个极值放在最后去

如图中黄色的数字表示该轮极值

所以最后经过 i 轮后

倒数第 i 个数是不需要进行比较

它已经是极值了

七大排序——冒泡排序


如何降序排列

七大排序——冒泡排序

升序(从小到大)

降序(从大到小)

具体是哪种排序

关键点就是条件表达式


如果是大于(>)

(从头到尾遍历时)

意思就是把大的往后放

结果就是升序排列



如果是小于(<)

(从头到尾遍历时)

意思就是把小的往后放

结果就是降序排列

七大排序——冒泡排序


从后往前比较

上面的冒泡排序,是从第一个开始,依次往后两两比较的,冒泡排序没有固定的写法,你可以从前往后比,也可以从后往前比。


从后往前比

七大排序——冒泡排序

红框处为修改过的代码

j = array.Length - 1

表示从最后一个元素开始


j > i

极值会往前放

和之前Length - 1 - i的原理一样


--j

表示从后往前遍历


j - 1表示

当前位置和前一个位置比较




优化



为何要优化

七大排序——冒泡排序

如果对原数组进行升序排列

第一轮过后就已经是最后结果了

但是程序还是会继续把后几轮比完

做一系列无用功

所以要优化

七大排序——冒泡排序

通过加入一个bool标识

达到优化目标

如果一轮排序结束后

发现没有任何值进行交换

那说明已经是最终结果了

则直接停止排序

七大排序——冒泡排序




总结



基本原理

两两相邻

不停比较

不停交换


套路写法

两层循环

一层轮数

一层比较


两值比较

满足交换


注意事项

从头遍历

从尾遍历


如何优化

加入bool

七大排序——冒泡排序

关注

唐老湿

获取更多干货内容




end