原理分析
- 1、冒泡的过程只涉及相邻的位置交换,只要常量级的临时空间,空间复杂度为O(1),所以是一个原地排序算法
- 2、冒泡排序在元素大小相等的相邻两个之间不做交换,因此是稳定的排序算法
- 3、最好的情况下为有序的,只需要一个冒泡操作即可,所以最好的情况下的时间复杂度为O(n),最坏的情况下为倒序的,需要n次冒泡操作,因此最坏情况下的时间复杂度为O(n*n),平均下来的时间复杂度为O(n^2)
![每一轮选最大值](https://i-blog.csdnimg.cn/blog_migrate/45d9e89f889455ae5bdcc2aa5024a31a.png)
冒泡排序
package cn.Bubble;
public class ArrayBubble {
public static void bubbleSort(int[] arr) {
if(arr.length<=0) {
return ;
}
int lastExchangeIndex = 0;
int sortBorder = arr.length -1;
for(int i=0; i<arr.length; i++) {
boolean flag = true;
System.out.println("第"+(i+1)+"轮");
for(int j=0; j<sortBorder; j++) {
int temp =0;
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;
lastExchangeIndex = j;
}
}
sortBorder = lastExchangeIndex;
if(flag) break ;
}
}
public static void main(String[] args) {
int[] arr = {2,6,6,8,9,1,3,4};
bubbleSort(arr);
StringBuilder sb1 = new StringBuilder();
sb1.append("[");
for(int i=0; i<arr.length; i++) {
if(i == arr.length-1) {
sb1.append(arr[i]);
}else {
sb1.append(arr[i]+",");
}
}
sb1.append("]");
System.out.println(sb1);
}
}