动画演示:
原理:
我们要知道冒泡排序如同水中的水泡一样,浮出水面时,水泡越来越大,所以冒泡排序,从第一个开始与相邻的比较,依次向后,最终会选出最大的放在最后,于是第一轮冒泡结束,第二轮继续从最左边开始依次比较选出最大的放在最后第二位,依次这样即可
思路:
- 从左向右,依次比较相邻(i++)。如果第一个比第二个大,就交换它们两个,选出最大的放在最后
- 此时排除最大的数(j--),接着下一轮继续相同的操作,确定第二大的数...
- 重复步骤,直到排序完成。
代码:
public class BubbleSort {
public static void main(String[] args) {
int[]a = new int[]{2,6,3,4,9,8};
sort(a);
print(a);
}
private static void sort(int[] a) {
int len = a.length;
//每次选出最大元素后,j--,之后不需要在管最大的那个元素了
for(int j = len-1;j>=0;j--){
//依次比较相邻的两个元素
for(int i=0;i<j;i++){
if(a[i] > a[i+1]){
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
}
private static void print(int[] arr) {
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
}
平均时间复杂度:O(n²)
空间复杂度:O(1)
算法稳定性:稳定