一、冒泡排序的实现步骤
(1)比对相邻元素的值,如果前者比后者大,则交换它们;
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
二、例子
原始数据:
4 3 2 5 1
排序过程:
3 2 4 1 5
2 3 1 4 5
2 1 3 4 5
1 2 3 4 5
我们会发现,每一轮多次交换之后,大的元素都会沉到底部,小的元素往上浮。当整个数据是逆序的时候,需要交换的元素的次数最多,时间复杂度为O(N2);而当整个数组是有序的时候其交换次数最少(不需要交换)。
三、代码实现
/**
* Created by lysongzi on 16/3/2.
* 冒泡排序
*/
public class BubbleSort {
public static void sort(int [] arr){
int i, j, temp;
for (i = 0; i < arr.length - 1; i++){
for (j = 0; j < arr.length - 1 - i; j++){
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
参考资料
- 维基百科