冒泡排序,从字面上的意思就能看出来,就想空气从水底冒出来一样。在排序中,这个往上冒的过程可以分成两种,第一是大的数字网上冒(结果为升序,判断的时候用>),第二就是小的数字往上冒(结果为降序,判断的时候用<)。下面给出几种实现方法:
1.0 简单粗暴型的双循环
public static void bubbleSortWithDoubleFor(int[] array){
for(int i = 0 ; i<array.length-1;i++){
for(int j = 0 ; j <array.length-1-i;j++){
int temp=array[j];
if(array[j]>array[j+1]){
array[j]=array[j+1];
array[j+1]=temp;
}else{
continue;
}
}
}
}
2.0 采用while的形式
public static void bubbleSortWithWhile(int[] array){
boolean ifChange;
do{
ifChange=false;
for(int i = 0 ; i < array.length-1;i++){
if(array[i]>array[i+1]){
int temp=array[i+1];
array[i+1]=array[i];
array[i]=temp;
ifChange=true;
}
}
}while(ifChange);
}
3.0 递归调用的形式
public static void bubbleSort(int[] array) {
boolean isSorted = false;
for (int i = 0; i < array.length - 1; i++) {
if (array[i]>array[i + 1]) {
int temp=array[i+1];
array[i+1]=array[i];
array[i]=temp;
isSorted = true;
}
}
if (!isSorted) {
return;
}
bubbleSort(array);
}
其实冒泡排序无论用何种方法实现,中心思想就是把大或者小的数往一头赶,然后得出排序的结果。时间复杂度上,当整个数组都是反序的,那么要改变n*(n-1)/2 也就是说最坏为n的平方。