冒泡排序:算法步骤
1、比较相邻元素,若前一个元素比后一个元素大,则交换位置
2、将每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数
3、针对所有的元素重复以上的步骤,除了最后一个
4、重复以上三个步骤,知道排序完成
排序过程如图所示:
public class BubbleSort {
@Test
public void testBubbleSort(){
int[] arr=new int[]{5,3,1,4,7,9,8,6,10,2};
//int[] arr=new int[]{1,2,3,4,5,6,7,8,9,10};
int [] newArr=bubbleSort(arr);
System.out.println(Arrays.toString(newArr));
}
private int[] bubbleSort(int[] arr) {
for (int i=1;i<arr.length;i++){ //外循环决定要比较多少趟,如果有n个数,要比较n-1趟
/*//此处对代码做了一个小优化,加入了 is_sorted Flag,
目的是将算法的最佳时间复杂度优化为 O(n),即当原输入序列就是排序好的情况下,
该算法的时间复杂度就是 O(n)*/
boolean flag=true;
for (int j=0;j<arr.length-i;j++){ //内循环决定每一趟要比较多少次,第i趟需要比较的次数j为n-i次
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag=false;
}
}
if (flag){ //若数组是有序情况下,时间复杂度为O(n)
break;
}
}
return arr;
}
}