**實現
將數列中的第乙個元素和第二個元素比較數值大小,若第乙個元素比第二個元素大,則交換位置。
然後再將第二個元素和第三個元素比較數值大小,第三個元素和第四個元素比較…依次不斷地比較,交換。
不斷迴圈比較,直到不再發生交換,這就表明排序已完成,此時得到就是乙個有序數列。
簡單來說就是不斷迴圈比較數列中相鄰元素的數值大小,根據陣列大小關係通過交換位置來調整元素中的位置,直到數列中所有的元素位置不再發生改變。
例如:對乙個含有4個元素的數列:6,4,9,5 進行從小到大排序
第一趟(第一次迴圈):
初態i=0
i=1i=264
4446
6699
9555
59
1
.i=0
第一次先將最前面的兩個數6和4比較,6比4大,因此將4和6的位置交換6,
4,9,
5--> 4,6
,9,5
2.i=1第二次再將中間兩個數6和9比較,6比9小,無需交換位置。4,
6,9,
5--> 4,6
.9,5
3.i=2第三次再將後面兩個數9和5比較,9比5大,因此將9和5的位置交換4,
6,9,
5--> 4,6
,5,9
第二趟(第二次迴圈):
初態i=0
i=1i=244
4466
5555
6699
99
1
.i=0
第一次先將最前面的兩個數4和6比較,4比6小,無需交換位置4,
6,5,
9--> 4,6
,5,9
2.i=1第二次再將中間兩個數6和5比較,6比5大,因此將6和5的位置交換4,
6,5,
9--> 4,5
,6,9
3.i=2第三次再將後面兩個數6和9比較,6比9小,無需交換位置4,
5,6,
9--> 4,5
,6,9
第三趟(第三次迴圈):
初態i=0
i=1i=244
4455
5566
6699
99
1.
i=0 第一次先將最前面的兩個數4和5比較,4比6小,無需交換位置
2.i=1
第二次先將中間的兩個數5和6比較,4比6小,無需交換位置
3.i=2
第三次先將後面的兩個數6和9比較,4比6小,無需交換位置
第三趟沒有發生交換,表明排序已完成,此時得到就是乙個有序數列。
最差情況:要排序的列表完全逆序的情況下,此時時間複雜度為o(n^2)
最好情況:要排序的列表已經排好順序的情況下,此時只需對列表掃瞄一次,演算法複雜度為o(n)
/*
* @author skyward
*/public
class
bubblesort
}} while (numbersswitched);
} @test
public
void
testbubble() ;
//預期結果
final
int expected = ;
bubblesort(numbers);
assertarrayequals(expected, numbers);
}}
氣泡排序(從小到大)
氣泡排序是一種極其簡單的排序演算法,也是我所學的第乙個排序演算法。它重複地走訪過要排序的元素,一次比較相鄰兩個元素,如果他們的順序錯誤就把他們調換過來,直到沒有元素再需要交換,排序完成。這個演算法的名字由來是因為越小 或越大 的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算法的運作如下 比較相鄰...
選擇 插入 氣泡排序(從小到大)
package com.wangzhu.main public class main work new int work new int work new int public static void work int arr 插入排序 從小到大 在要排序的一組數中,假設前面 n 1 n 2 個數已...
氣泡排序 從小到大排序
li 1,5,2,44,66,564,33,76,378 def bubble sort li 獲取列表的長度 n len li 遍歷列表長度減1次 for i in range 1,n 建立乙個變數,用來機率冒泡,是否有資料交換位置 status false 每次遍歷獲取第乙個元素,依次和後面的元...