七大排序——冒泡排序
排序算法是面试中最常考的内容,而冒泡排序则是其中最基础的部分。
两两相邻
不停比较
不停交换
从第一个数开始,依次与自己的后一个数相比较,满足交换条件(大于或者等于)则交换,依次类推。把极值(最大或者最小)放到最后(或最前)去。
循环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