简介
冒泡排序是计算机领域中最为简单的一种排序算法之一,它的基本原理就是依次比较相邻的两个数,将较小的数放前面,较大的数放后面。
冒泡排序的时间复杂度为O(N^2)
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
算法流程图
下图摘自百度百科
举例
若用冒泡算法排序数组:[5,1,3,9,7,6]
(1)第一趟排序:
第一次比较:5和1比较,5大于1,交换位置 [1,5,3,9,7,6]
第二次比较:5和3比较,5大于3,交换位置 [1,3,5,9,7,6]
第三次比较:5和9比较,5小于9,不交换位置 [1,3,5,9,7,6]
第四次比较:9和7比较,9大于7,交换位置 [1,3,5,7,9,6]
第五次比较:9和6比较,9大于6,交换位置 [1,3,5,7,6,9]
第一趟总共进行了五次比较,排序结果:[1,3,5,7,6,9]
(2)第二趟排序:
第一次比较:1和5比较,1小于5,不交换位置 [1,3,5,7,6,9]
第二次比较:3和5比较,3小于5,不交换位置 [1,3,5,7,6,9]
第三次比较:5和7比较,5小于7,不交换位置 [1,3,5,7,6,9]
第四次比较:7和6比较,7大于6,交换位置 [1,3,5,6,7,9]
第二趟总共进行了四次比较,排序结果:[1,3,5,6,7,9]
到目前位置已经为有序的情形了。
java代码实现
import java.util.Arrays;
public class BubbleSort {
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = arr.length - 1; i > 0; i--) {
for (int j = 0; j < j; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
public static void swap(int[] arr, int i, int j) {//交换元素
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}