- 马上要实习面试了,总结和分析一下算法与数据结构。 冒泡排序依次比较两个相邻的元素,如果从小到大排列,那么越大的数就会慢慢浮现。
如果已经是顺序,那么一次都不需要交换,最好的时间复杂度是O(n)。
如果完全反序,那么外层循环需要n-1轮,内层循环需要n-1-i轮,最差的时间复杂度是O(n²)
public static void BubbleSort(int[]arr){
int length = arr.length;//数组长度
int temp; //临时存储交换的数
boolean flag = false; //是否进行过交换,如果一次都没有,说明顺序已经正确
//总共需要循环length-1次
//因为只要排好后length-1个数,arr[0]肯定在正确位置
for(int i=0;i<length-1;i++{
//第一次是第arr[0]到arr[length-1]
//最后一次是arr[0]到arr[1]
for(int j=0;j<length-1-i;j++){
if(arr[j]>arr[j+1]){
flag=true;
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if(!flag){//没有进行过交换,直接退出
break;
}else{ flag = false;}
}
}