简单排序1-冒泡排序
思路
- 1.每次从左开始两个紧邻元素比较大小,如果大就交换位置到右边。
- 2.得到大数并且交换到右边位置后,它继续和它的右边一个数比较大小重复1步骤,这样重复下来第一轮最后一个位置就是最大数。
- 3.下次排序时重复1,2步骤一直到上一次排好顺序的前一个位置上。
SortUtils.java 主要完成换位和打印任务,在之后的简单排序中都会用此工具类
|
|
Bubble.java 具体实现
|
|
输出:3 5 6
说明
- 1.主要负责两个功能。1:外层计数器总共要进行几次的交换位置,2:内层循环时比大小的停止位置
- 2.每次从0位置开始和下一个位置比对大小,一直遇到out的停止排序的位置为止
- 3.如果这里是> 那么最终结果是3 5 6,如果这里是< 最终结果是6 5 3
简单排序1-冒泡排序优化版
在相对已经有序的数组中冒泡排序缺点是最后几个位置已经是固定的顺序时每次还会去消耗时间去比较大小。
比如:5,6,3,1,2,0,7,8,9
本身已经没有比较再去比较7,8,9但是还会在前三轮比较
优化思路
- 1.增加一个标识符来判断内循环时有无交换数据,如果内循环一次交换都没有发生就说明已经是有序数据,不用在消耗时间去做不必要地比较。
- 2.记录上一次交换索引的位置(lastExchangeIndex),每次数据比较只交换到lastExchangeIndex索引上,不用再去比较右边已经有序的数据。
BubbleOptimize.java 具体实现
|
|
输出:0 1 2 3 5 6 7 8 9
说明
- 1.初始化上一次交换索引位置,初始化比较结束位置
- 2.每次内循环开始前初始化交换标识符,假设每一次都没有交换
- 3.内循环开始,结束条件为上一次交换索引的位置
- 4.只要有交换就把标识符变为false,让它继续交换大小
- 5.每次交换位置后记录上一次交换索引的位置
- 6.把上一次交换位置给到下一次内循环的长度
- 7.如果内循环没有比较过就跳出整个比较
注:该内容为Java数据结构和算法读后学习感悟