冒泡排序
基本思想
冒泡排序是一种交换类排序方法。交换排序是根据序列中两个记录关键字的比较结果来交换在序列中的位置。冒泡排序算法的特点是将关键字较大的记录向序列尾部移动,关键字较小的记录向序列前部移动,其不同点是他们按照特定的顺序来选取序列中比较的记录。
操作方法
操作流程图:
操作步骤:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
算法实现(Java)
// 冒泡排序算法
publicstaticvoid bubbleSort(inta[]) {
for (inti = 0; i< a.length; i++){
for (intj = 0; j< a.length - i- 1; j++) {
// 这里-i主要是每遍历一次都把最大的i个数沉到最下面了,没有必要再替换了
if (a[j] > a[j + 1])
swap(a, j,j + 1);//交换
}
}
}
效率分析
算法性能:
时间复杂度:
冒泡排序算法的基本操作是比较的操作,数据规模是数组的长度n,原则上讲,算法的核心是内循环。因此,本算法最坏最好以及平均情况都是相同的,即O(n2),但是,有一点需要我们去注意,当这个序列基本有序时,我们就省去了很多的交换操作,此时该算法的效率要比乱序时高出很多。
空间复杂度
简单选择排序需要占用 1 个临时空间,在交换数值时使用。
算法稳定性
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定的排序算法。