氣泡排序(Bubble Sort)

2021-09-04 05:08:48 字數 3497 閱讀 3366

順序依次比較相鄰兩個元素,倒序則交換。

time complexity

value

最優時間複雜度

o (n

)o(n)

o(n)

最差時間複雜度

o (n

2)o(n^)

o(n2

)平均時間複雜度

o (n

2)o(n^)

o(n2

)

解析:

1)最優時間複雜度:輸入序列(num

=nnum=n

num=

n)自身順序時,僅需一輪n−1

n-1n−

1次比較便可結束。

2)最差時間複雜度:輸入序列(num

=nnum=n

num=

n)自身倒序時,一共需要經過n−1

n-1n−

1輪才可結束。具體而言,即第i

ii輪氣泡排序需比較n−i

n-in−

i次,交換3(n

−i)3(n-i)

3(n−i)

次,則共需比較∑i=

1n−1

=n(n

−1)2

\displaystyle\sum_^=\frac 2

i=1∑n−

1​=2

n(n−

1)​次,交換3∑i

=1n−

1=3n

(n−1

)23\displaystyle\sum_^=3\frac 2

3i=1∑n

−1​=

32n(

n−1)

​次。

space complexity

value

空間複雜度

o(1)

解析:

穩定性:若原序列中數i

ii位於數j

jj前面,且i=j

i=ji=

j,整個排序過程結束之後數i

ii仍位於數j

jj前面。

public

static

void

main

(string[

] args)

// 輸入--非數字--結束輸入過程

list.

close()

; system.out.

println

("輸入:"

+ inputarray)

;// end2start(inputarray); // case1: start ← end

// start2end(inputarray); // case2: start → end

end2startimprove

(inputarray)

;// case3: start ← end[優化]

+" → 不交換 → "

+ inputarray)

;}

system.out.

println

("end:"

+ inputarray);}

system.out.

println

("輸出:"

+" → 不交換 → "

+ inputarray)

;}

system.out.

println

("end:"

+ inputarray);}

system.out.

println

("輸出:"

+ inputarray)

;}

思考:某一輪氣泡排序過程中無任何交換時,說明已經有序,結束。

1)case1[6 3 8 2 9 1]:第4輪氣泡排序過程開始已無交換過程;

2)case2[6 3 8 2 9 1]:最後一輪氣泡排序過程依舊包含交換過程;

3)case1與case2[6 3 8 2 9 1]:總交換次數相等,總比較次數相等。

結論:優化只針對case1有效!

// case3: start ← end[優化]

public

static

void

end2startimprove

(arraylist

inputarray)

else

system.out.

println

(inputarray.

get(j)

+">"

+ inputarray.

get(j -1)

+" → 不交換 → "

+ inputarray);}

i++; system.out.

println

("end:"

+ inputarray);}

while

((i < inputarray.

size()

-1)&&

(change ==

false))

; system.out.

println

("輸出:"

+ inputarray)

;}

氣泡排序 bubble sort

氣泡排序是最基本的排序演算法,常被做為內部排序的第乙個排序演算法進行講解。它的原理非常簡單,只是一 個兩層迴圈,每次將最大或最小的放到陣列最後。演算法如下 b為陣列的起始位置,e為陣列的結果位置 int bubble int data,int b,int e return n 這個函式返回兩個整數比...

氣泡排序(Bubble Sort)

無論你學習哪種程式語言,在學到迴圈和陣列時,通常都會介紹一種排序演算法來作為例子,而這個演算法一般就是氣泡排序。並不是它的名稱很好聽,而是說這個演算法的思路最簡單,最容易理解。因此,哪怕大家可能都已經學過氣泡排序了,我們還是從這個演算法開始我們的排序之旅。氣泡排序 bubble sort 一種交換排...

氣泡排序 Bubble Sort

維基百科 氣泡排序 演算法思想 不斷的交換相鄰的兩個反序元素,使最小元素 上浮 或使最大元素 下沉 每一趟 冒泡 都會確定乙個最大的元素或最小的元素,同選擇排序類似,演算法總共只需進行n 1趟。將乙個陣列豎著放,低位址在上面,高位址在下面,所謂 上浮 就是較小的元素不斷向低位址靠近,所謂 下沉 就是...