氣泡排序詳解(從小到大)

2021-07-15 09:13:57 字數 1777 閱讀 5520

**實現

將數列中的第乙個元素和第二個元素比較數值大小,若第乙個元素比第二個元素大,則交換位置。

然後再將第二個元素和第三個元素比較數值大小,第三個元素和第四個元素比較…依次不斷地比較,交換。

不斷迴圈比較,直到不再發生交換,這就表明排序已完成,此時得到就是乙個有序數列。

簡單來說就是不斷迴圈比較數列中相鄰元素的數值大小,根據陣列大小關係通過交換位置來調整元素中的位置,直到數列中所有的元素位置不再發生改變。

例如:對乙個含有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 每次遍歷獲取第乙個元素,依次和後面的元...