算法思想:从后往前,两两比较(a[i-1]与a[i]比较),逆序交换两个元素,顺序不动。第一趟排序过后最小元素就会移到待排序元素最前面,这样每趟排序过后剩余待排序元素的最小值总会移到剩余待排序元素最前面,这样,n个元素最多进行n-1趟就可以有序了。注意的是,只要其中一趟如果没发生交换元素的情况,则此时该排序元素就已经是有序了,后续的就不用继续比较交换了。所以算法中应设置一个标志位,来判断每趟循环是否发生了交换,若没有发生交换,说明此时该序列已经是有序的,此时应该跳出循环。
算法步骤:最多进行n-1趟排序,并且需要比较交换,所以应该有两层循环,外层循环到从0-(n-1),表示n-1趟排序,内层循环从(n-1)-(1),两两比较并根据情况判断交换否,如发生交换则设置标志位为“交换”。综上,(1)外层循环0-(n-1)(2)环从(n-1)-(1),两两比较并根据情况判断交换否,如发生交换则设置标志位为“交换”(3)每趟循环后看标志位是否为true,若为false则break,跳出循环,该序列已经有序否则继续进行排序
实现代码:
public class BubbleSort { public static int[] bubbleSort(int[] array){ int n=array.length;//待排序数组长度 boolean isSwap;//标志位,判断是否发生交换动作 for(int i=0;i<n-1;i++){ isSwap=false;//每趟排序前将标志位设为false for(int j=n-1;j>0;j--){ if(array[j-1]>array[j]){ int temp=array[j-1]; array[j-1]=array[j]; array[j]=temp; isSwap=true; } } if(isSwap==false) break; } return array; } public static void main(String[] args){ int[] array={6,4,8,3,7,1,9,2,10,5,0}; System.out.println(BubbleSort.bubbleSort(array).toString()); } }运行结果: