上文我們聊到桶排序,瞭解到雖然桶排序簡單,快速,但是同時也有其致命的缺點:那就是空桶對內存空間的極大浪費以及只能針對正整數排序;所以我們需要一個較好的算法來解決這兩個問題,接下來我們就來認識一個新的算法:冒泡排序。
先上代碼實現:
public class BubbleSort {
public static void main(String[] args) {
// 1.等待排序的數組
int[] waitNumbers = {3,15,8,13,6,35};
// 2.定義一個臨時變量
int temp;
// 3.冒泡趟數
for (int i = 0; i < waitNumbers.length - 1; i++) {
for (int j = 0; j < waitNumbers.length - i - 1; j++) {
if (waitNumbers[j + 1] < waitNumbers[j]) {
temp = waitNumbers[j];
waitNumbers[j] = waitNumbers[j + 1];
waitNumbers[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(waitNumbers));
}
}
結果:[3, 6, 8, 13, 15, 35]
如果你想從大到小的順序排序就將判斷條件換下即可;
分析(已從小到大爲例):從第一個數開始,拿第一個數依次與相鄰的兩個數比較,如果後面一位小於前面一位就將這兩個數字的位置互換,經過第一次冒泡之後,我們就能將最大的那位數字排到了最後一位;
第二輪,繼續從第一個數開始,相鄰比較直到倒數第二位結束,就將第二大的數排到了倒數第二位;
依次類推下去:我們將能將數字從小到大排序;
案例中i就代表需要遍歷的輪數,j代表每一輪的遍歷,整個過程類似冒泡將最大的數依次冒出水面,因此得名:冒泡算法
冒泡算法的核心:雙重嵌套循環,我們不難發現該算法的時間複雜度爲:O(N²)這個時間複雜度是比較高的