冒泡排序是对序列进行循环遍历的一种排序方式,每次把最小或最大的元素放到序列的最前端。
1.代码实现
以java实现为例:
public class BubbleSort {
public static int[] bubbleSort(int[] nums) {
for (int i = 0; i < nums.length; i++) {
for (int j = i; j < nums.length; j++) {
if(nums[i] > nums[j]){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
return nums;
}
public static void main(String[] args) {
int[] nums = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 10 };
int[] newNums = bubbleSort(nums);
for (int x : newNums) {
System.out.print(x+" ");
}
}
}
2.数据运行解析
数据的分解示例如下
i=0时 [9 8 7 6 5 4 3 2 10] -> [8 9 7 6 5 4 3 2 10] -> [7 9 8 6 5 4 3 2 10] -> [6 9 8 7 5 4 3 2 10] -> [5 9 8 7 6 4 3 2 10] -> [4 9 8 7 6 5 3 2 10] -> [3 9 8 7 6 5 4 2 10] -> [2 9 8 7 6 5 4 3 10] 此时序列的最小元素已经放在最前,进入下一轮循环i=1时 -> [2 8 9 7 6 5 4 3 10] -> [2 7 9 8 6 5 4 3 10] .....
3.复杂度分析
冒泡排序在序列已经有序的情况下有最好时间复杂度O(n)(上述代码未实现,需要设置标识判断有序情况),最差和平均时间复杂度都是O(n²),空间复杂度为T(1)。