思路
将数组分为待排序序列和已排序排序,待排序序列在前,已排序序列在后。每次遍历将待排序序列中最大的元素移到待排序序列的最后一个位置,该元素会成为新的已排序序列的第一个元素。
代码
public static void bubbleSort(int[] arr) {
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr.length-i-1; j++) {
if(arr[j] > arr[j+1]){
swap(arr, j, j+1);
}
}
}
}
性能分析
时间复杂度:
- 最好:顺序序列,只用做判断,不用做交换,但时间复杂度仍为 O ( n 2 ) O(n^2) O(n2)
- 最坏:逆序序列,判断+交换, O ( n 2 ) O(n^2) O(n2)
- 平均: O ( n ) O(n) O(n)
空间复杂度:
O
(
1
)
O(1)
O(1)
稳定性: 稳定