冒泡排序
什么是冒泡排序
顾名思义,冒泡排序就像气泡在水中上浮的过程,气泡越大,它就上升的越快。然而,在计算机程序中又怎么理解呢?可以理解为:序列的中极值(大或小)使它快速上浮到序列末尾。
算法简介:
- 比较相邻的元素,如果顺序错误,则交换位置。
- 每一对相邻对进行比较,从开始对到结尾对,这轮比较完成,结尾为最大值或最小值。
- 针对除了最后一个元素进行上面的步骤。
- 重复1-3的步骤,直到完成排序。
眼见为实,上图
怎么使用冒泡排序
操练起来
public static void main(String[] args) {
int [] arr = {5,6,2,4,8,9,3,7,1};
for (int j = 0; j < arr.length; j++) {
for (int i = 0; i < arr.length - j - 1; i++) {
if(arr[i] > arr[i + 1]){
int tem = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = tem;
}
}
System.out.println(Arrays.toString(arr));
}
}
[5, 2, 4, 6, 8, 3, 7, 1, 9]
[2, 4, 5, 6, 3, 7, 1, 8, 9]
[2, 4, 5, 3, 6, 1, 7, 8, 9]
[2, 4, 3, 5, 1, 6, 7, 8, 9]
[2, 3, 4, 1, 5, 6, 7, 8, 9]
[2, 3, 1, 4, 5, 6, 7, 8, 9]
[2, 1, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
总结
若对n个元素进行排序,则需要n次轮询,第k次轮询是需要n-k次比较。比较次数为:(n-1) + (n-2) + … + 1 = n*(n-1) / 2,因此冒泡排序的时间复杂度为O(n^2)