java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)
原理簡述
冒泡排序是最簡單的排序算法之一,主要是通過不斷交換相鄰元素,實現排序。
簡單例子
對[4,2,6,3,2,1]進行升序排序
第一遍(排出最大值)
1.png
第二遍(排出次大值)
2.png
第三遍
3.png
第四遍
4.png
第五遍
5.png
每次循環都通過比較相鄰的元素,逆序就進行交換,每次都將本次循環內的最大元素交換到最后,通過多次循環,最終變為一個有序的數組。
代碼實現Java
public static int[] sort(int[] array){
//數組長度
int length = array.length;
//外層循環
for (int i=0; i
//內層循環
for (int j=0; j
//如果后面的元素比前面的大,交換
if (array[j+1]
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}//內層循環 end
}//外層循環 end
return array;
}
優化
上面數組的例子其實并不好,加入我們要排序的數組為[1,2,3,4,5,6],我們使用上面的算法進行排序,可以發現,即便是一個已經排序好的數組,該走的步驟一步不落,雖然沒有進行交換,但是循環次數和比較次數是一定的。也就是說,這些循環完全是沒有必要的。那么,如何判斷一個數組是有序的呢?
其實可以發現,如果內層循環沒有發生交換,那么數組便已經是有序的,我們便可以退出循環了。我們可以用一個標記,來記錄是否發生了交換,進而判斷是否還要繼續進行排序。
代碼實現
public static int[] sort(int[] array){
int length = array.length;
for (int i=0; i
//用來標記是否需要結束循環
boolean flag = true;
for (int j=0; j
if (array[j+1]
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
//發生了交換,不能結束循環
flag = false;
}
}
//是否結束循環
if (flag){
break;
}
}
return array;
}
通過這個標記,對于數組[1,2,3,4,5,6],內循環只需要進行一次,沒有發生交換,外部循環就會結束,避免了多余的循環。
算法分析
時間復雜度:
最壞情況:O(n^2)
最好情況:O(n)
穩定性:
冒泡排序是穩定的排序,在排序過程中,相等的元素的相對位置不會發生變化。
完整代碼
public class BubbleSort {
public static int[] sort(int[] array){
int length = array.length;
for (int i=0; i
//用來標記是否需要結束循環
boolean flag = true;
for (int j=0; j
if (array[j+1]
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
//發生了交換,不能結束循環
flag = false;
}
}
//是否結束循環
if (flag){
break;
}
}
return array;
}
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
int[] sort = sort(arr);
for (int i : sort) {
System.out.println(i);
}
}
}
總結
以上是生活随笔為你收集整理的java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php mysql防卡_php mysq
- 下一篇: 工信部:1-2 月份通信业电信业务收入累