冒泡排序的思想
1. 比较相邻元素,按需求归位。
2. 冒泡排序双层嵌套,外层负责比较次数,内层负责比较归位数据。
3. 最大或最小数据的归位后,为优化性能不应该再次进行比较。
冒泡排序实现
public class BubbleSort {
public static void main(String[] args){
//定义并直接初始化数组
int [] arr = {1,8,9,6,3,5,7,4};
//外层循环,取得循环次数
for (int i = arr.length-1; i > 0;i--) {
//内层循环,比较把最大数归位
for (int j = 0; j < i; j++) {
if(arr[j] > arr[j+1]){
//定义中间变量,并交换位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//遍历输出排序好的数组
for(int k:arr){
System.out.print(k+" ");
}
}
}
冒泡排序的时间复杂度
- (比较次数最少)所给列表和预期一致,即所给数据为正序或反序排列好的。则一趟扫描即可完成,内层循环关键字比较次数为n-1,置换元素次数0(即交换位置的代码不执行);忽略系数后时间复杂度为O(n);
- (比较次数最多)如果所给数据与预期刚好相反,如需要正序给的为反序。则需要进行置换排序操作了,每趟关键字的比较次数为比较次数n(n-1)/2=O(n^2),忽略系数计算时间复杂度为O(n^2),移动次数每次也进行3次移动置换操作3n(n-1)/2=O(n^2),忽略系数时间复杂度为O(n^2)。
- 平均时间复杂度为O(n^2)。
冒泡排序的稳定性
稳定性指排序后相同的元素是否会调换位置。
冒泡排序讲究把小的元素往前调或者把大的元素往后调。冒泡排序比较相邻元素,相同元素排序后仍然是原顺序,所以冒泡排序是稳定的。(如果相邻元素相同跳过比较了,所以排序后的结果是稳定的)
冒泡排序的优缺点
优点:代码简单,双层嵌套即可实现,具有稳定性
缺点:时间复杂度高