1 解题思路
原理:比较两个相邻的元素,将大的元素交换到右边。
思路:依次比较两个相邻的元素,将小的元素放到左边,大的元素放到右边。
1)第一次比较:比较第一个元素和第二个元素,将小的放到左边,大的放到右边;
2)第二次比较:比较第二个元素和第三个元素,将小的放到左边,大的放到右边;
…………
3)依次比较相邻的两个元素,直到最后两个元素,把小的放到左边,大的放到右边,这样数组最后一个元素就是整个数组中最大的元素;
4)然后开始第二轮比较,第一轮得到了最后的元素,所以最后一个元素不参与比较,第二轮会得到倒数第二个元素。
5)第二轮比较完成之后,得到的倒数第二个元素一定是整个数组中第二大的元素。在第三轮比较中倒数第二个元素不参与比较。
6)依次类推,每一轮比较,元素就少一个。
2 编码实现
public static void bubbleSort(int[] nums){
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums.length-1-i;j++){
if(nums[j]>nums[j+1]){
int tmp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = tmp;
}
}
}
}
2.3.3 时间复杂度和空间复杂度
冒泡排序有两层 for 循环,所以平均时间复杂度 T(n) = O(n^2) 。排序的过程中没有额外使用空间,所以空间复杂度 S(n) = O(1)。