氣泡排序,從字面上理解,冒泡的話,可以想象魚在水裡吐泡泡,越接近水面的泡泡越大,越遠離水面的泡泡越小,那麼氣泡排序也就是乙個種從小到大的排序。 氣泡排序的原理:比較相鄰的兩個數,將值大的交換值右端
每次都比較相鄰的兩個數,在第一輪之後,最大的值就到了最右端,那麼第二輪就可以少一次比較,因為在第一輪最大的值已經在右端,所以第二輪比較,最右端的數就不參與比較,也就少了1次比較; 到了第三輪,由於經過了第一輪和第二輪的比較,最大的值和第二大的值,都位於最右邊,和右邊起的第二個位置,那麼第三輪就可以不用進行右邊第一和第二個數的比較,所以在三輪的比較次數就少了2次; 後面的一次類推,最後的效果就是從左往右,從小到大。
假如有乙個陣列int a =
++++++++++++第 1 輪比較+++++++
第 1 次交換 2<3 不交換位置 2,3,4,1,5
第 2 次交換 3<4 不交換位置 2,3,4,1,5
第 3 次交換 4>1 交換位置 2,3,1,4,5
第 4 次交換 4<5 不交換位置 2,3,1,4,5
++++++++++++第 2 輪比較+++++++
第 1 次交換 2<3 不交換位置 2,3,1,4,5
第 2 次交換 3>1 交換位置 2,1,3,4,5
第 3 次交換 3<4 不交換位置 2,1,3,4,5
由於第一輪比較已將最大值放置最右邊,所有不用進行第 4 個和第 5 個數比較
++++++++++++第 3 輪比較+++++++
第 1 次交換 2>1 交換位置 1,2,3,4,5
第 2 次交換 2<3 不交換位置 1,2,3,4,5
同上++++++++++++第 4 輪比較+++++++
第 1 次交換 1<2 不交換位置 1,2 ,3,4,5
同上++++++++++++比較結束+++++++
ok,到了這裡,氣泡排序完成了,由之前的2,3,4,1,5換成了1,2,3,4,5
我們進行了一共 4 輪的交換,如果把陣列的長度看做 n 那麼,我們一共需要進行 n-1 輪交換; 在每一輪我們都進行了不同次數的排序,同樣把把陣列長度看成是 n ,把輪數看成是 i ,那麼在每一輪中,我們一共需要進行 n-i 次交換位置
根據上面的規律,我們可以寫兩個for迴圈來說實現,乙個迴圈來實現輪數 n-1 的規律,另乙個迴圈來實現 n-m 的規律
定義乙個變數 i ,i用來控制迴圈論述,所以初始值為1,那麼每次迴圈都進行i++,且for迴圈條較為i《陣列長度,也就實現了 n-1 規律
1for(int i=1; i定義乙個變數 j ,用來控制每輪迴圈中的次數,那麼每次迴圈都進行 j++ ,且for迴圈條件為 j《陣列長度-i ,也就實現了n-1規律
for(int j=1;j因為陣列的標是從0開始的,所以我們在上面兩個for迴圈將 i 和 j 都定義成 0,那麼在交換for迴圈條件那麼相應的 -1 即可。
1 for(int i=0;i定義乙個中間變數用來存放臨時的交換值:
if(a[j]>a[j+1])
1 public class maopao ;
5 int b = 0;
6 system.out.println("原始陣列");
7 for (int i : a)
10 for (int i = 0; i < a.length-1; i++)
17 }
18 }
19 system.out.println();
20 system.out.println("氣泡排序之後");
收藏
java排序之氣泡排序
假設一籃球隊,成一佇列排列在籃球場上,每個人的身高都不相同,這樣的話就會成下面這種 現在呢,要對他們以身高進行排列讓他們成下面這種情況 採用氣泡排序的方式歷程如下 熊佇列的最左邊第一位 簡稱左一 起,讓他與最左邊第二位 左二 進行比較,如果左一的身高高於左二,那麼讓左一與左二調換位置 接下來對比左二...
java之氣泡排序
1 什麼是氣泡排序?網上查了點資料,也沒有找到什麼有用的概念,大致的意思都是 相鄰的兩個數兩兩做比較。根據相應的規則 比較大的往後放或比較小的往後放 放置兩數的位置 規則 大的數往後靠 比較前 2,1 比較後 1,2 2 實戰 假設有這樣乙個陣列 int arr 氣泡排序是這樣排的 規則 小的往後靠...
Java之氣泡排序
直接上傳氣泡排序 public class sort bubblesort array for object obj array public static void bubblesort int array 時間複雜度 平均情況o n 2 最好情況o n 最壞情況o n 2 空間複雜度 o 1 穩...