原理
在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序
代码实现
public static void bubbleSort(int[] array){
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - i-1; j++) {
if(array[j] >array[j+1]){
swap(array,j,j+1);
}
}
}
}
public static void swap(int[] array,int a,int b){
int tmp = array[a];
array[a] = array[b];
array[b] = tmp;
}
代码分析:
第一层循环表示的比较的次数,因为数组中有length个元素,所以需要比较length次
而第二层循环是相邻的元素比较,从第一个元素开始,将数值大的元素放在后面,两两比较,一直到最大的元素放在最后,因为每循环一次,最后一个就是最大的元素,所以为了避免多次重复比较,循环条件为
j < array.length - i-1
既可以完美避免越界,也可以比较所以未排序元素.
性能分析
时间复杂度: O(N^2)
有序情况下:O(N)
空间复杂度:
O(1)
稳定性:稳定的排序