更新時(shí)間:2020-05-20 來(lái)源:黑馬程序員 瀏覽量:
冒泡排序是Java中非常經(jīng)典的一種排序方法,可以將多個(gè)數(shù)字進(jìn)行升序排序,效率比較高。
一、冒泡排序的原理兩個(gè)相鄰的數(shù)比較大小,將兩個(gè)數(shù)中較大的數(shù)往右邊放,小的往左邊放。
二、冒泡排序的圖解
1.首先定義一個(gè)數(shù)組:int[] arr = {4,2,5,3,1}
2.比較的圖解是這樣的:
三、冒泡排序的思路解析依次比較前后兩個(gè)數(shù)的大小,如果后面的比前面的數(shù)小,那么直接將小的放在左邊,大的數(shù)放在右邊,以此類推
例如我們定義的數(shù)組:int[] arr = {4,2,5,3,1}
第一圈比較:
1. 用arr[0]和arr[1]進(jìn)行比較,那么2比4小,那么2往左邊移一位,4往右邊移一位;
2. 然后用arr[1]和arr[2]進(jìn)行比較,現(xiàn)在4比5小,所以不動(dòng)
3. 再用arr[2]和arr[3]進(jìn)行比較,現(xiàn)在5比3大,所以將3往左邊移動(dòng)一位,5往右邊移動(dòng)一位
4. 再用arr[4]和arr[4]進(jìn)行比較,現(xiàn)在5比1大,所以將1往左邊移動(dòng)一位,5往后邊移動(dòng)一位,這樣就把最大的數(shù)放到了最右邊
*現(xiàn)在通過(guò)比較并且移動(dòng)之后,數(shù)組arr中的元素變成了{(lán)2,4,3,1,5}
第二圈比較:
1. 用arr[0]和arr[1]進(jìn)行比較,那么2比4小,所以不用動(dòng)
2. 用arr[1]和arr[2]進(jìn)行比較,那么4比3大,所以將3往左邊移動(dòng)一位,4往右邊移動(dòng)一位
3. 用arr[2]和arr[3]進(jìn)行比較,那么4比1大,所以將1往左邊移懂一位,4往右邊移動(dòng)一位
*由于最大的已經(jīng)在最右邊了,所以不用和arr[4]進(jìn)行比較了,現(xiàn)在通過(guò)第二圈比較之后的數(shù)組元素變成了{(lán)2,3,1,4,5}
*注意,現(xiàn)在第二圈比較的次數(shù)少了一次
第三圈比較:
1. 用arr[0]和arr[1]進(jìn)行比較,那么2比3小,所以不用動(dòng)
2. 用arr[1]和arr[2]進(jìn)行比較,那么3比1大,所以將1往左邊移動(dòng)一位,3往右邊移動(dòng)一位
*現(xiàn)在通過(guò)第三圈的比較,數(shù)組中的元素變成了{(lán)2,1,3,4,5}
*注意,現(xiàn)在第三圈比較的次數(shù)又少了一次
第四圈比較:
1.用arr[0]和arr[1]進(jìn)行比較,那么2比1大,所以將1往左邊移動(dòng)一位,2往右邊移動(dòng)一位
*現(xiàn)在用過(guò)第四圈的比較,數(shù)組中的元素變成了{(lán)1,2,3,4,5},這樣就比較完成了。
那么通過(guò)這4圈的比較,可以確定我們數(shù)組的長(zhǎng)度為5,但是我們比較了4次,所以我們可以確定,我們循環(huán)比較了4 圈。所以,外層for循環(huán)可以確定為for (int i = 0, i < arr.length-1;i++)。
四、形成代碼
//冒泡排序
public static void bubbleSort(int[] arr) {
//功能
//外層循環(huán)用來(lái)控制數(shù)組循環(huán)的圈數(shù)
for (int i = 0; i < arr.length-1; i++) {
//內(nèi)層循環(huán)用來(lái)完成元素值比較,把大的元素值互換到后面
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
五、總結(jié)以上是冒泡排序的具體思路分析,學(xué)習(xí)冒泡排序需要捋清楚其過(guò)程,主要是分析冒泡排序是怎么比較的。
如果對(duì)java比較感興趣或者正在自學(xué)java可以了解黑馬程序員的中級(jí)java培訓(xùn)課程。
猜你喜歡:
JDK下載安裝與環(huán)境變量配置圖文教程【超詳細(xì)】