氣泡排序 java

2021-08-30 15:45:58 字數 2608 閱讀 5085

引言

氣泡排序是我們一般排序入門,也是演算法入門。但是重複的迴圈注定它是乙個低效的演算法,低效不低效是由排序多少數字來決定的。可能我們排幾個數時,看不出來,但是要是給上乙個100萬數字的陣列排序,那就需要很長的時間,而快排只需要很短時間。

原理它的一次排序就像石頭扔在水中,石頭和水不停的做交換,直到石頭觸地。

將相鄰的兩個元素加以比較,若左邊的元素大於右邊的元素,則將兩元素交換,若左邊的元素小於右邊的元素,那麼兩元素位置不變,右邊的元素繼續和下乙個元素進行比較,重複這個過程,直到比較到最後乙個數為止。

偽**

bubblee-

sort

(a)//氣泡排序

for i <

-1 to length[a]

//外層迴圈 從第乙個數到最後乙個數

dofor j <

- length[a] downto i+

1//只排 指標往後的

doif a[i]

//比較

then exchange a[j]

<

->a[j-1}

//交換

**
private

static

int[

]bubblesort

(int

a)}}

return a;

}

時間複雜度分析

**段開銷

次數for i <- 1 to length[a]

c1n+1

do for j <- length[a] downto i+1c1∑i=

1n(n

−i+1

)\sum_^n(n-i+1)

i=1∑n​

(n−i

+1)do if a[j]c2

∑ i=

1n(n

−i

)\sum_^n(n-i)

i=1∑n​

(n−i

)then exchange a[j]<->a[j-1]

c3t(i)

t (n

)=c1

(n+1

)+c1

[∑i=

1n(n

−i+1

)]+c

2[∑i

=1n(

n−i)

]+c3

ti

t(n) = c_1(n+1) + c_1[\sum_^n(n-i+1)]+c_2[\sum_^n(n-i)] +c_3t_i

t(n)=c

1​(n

+1)+

c1​[

i=1∑

n​(n

−i+1

)]+c

2​[i

=1∑n

​(n−

i)]+

c3​t

i​= c1

(n+1

)+c1

n(n+

1)/2

+c2n

(n−1

)/2+

c3ti

= c_1(n+1) +c_1n(n+1)/2+c_2n(n-1)/2+c_3t_i

=c1​(n

+1)+

c1​n

(n+1

)/2+

c2​n

(n−1

)/2+

c3​t

i​= n2

(c1+

c2)/

2+n(

3c1−

c2)/

2+c1

+c3t

i= n^2(c_1+c_2)/2 + n(3c_1 - c_2)/2+c_1+c_3t_i

=n2(c1

​+c2

​)/2

+n(3

c1​−

c2​)

/2+c

1​+c

3​ti

​最後的結果:

t (n

)=an

2+bn

+c

t(n) = an^2+bn+c

t(n)=a

n2+b

n+c在排序量特別大時,高數告訴我們要忽略低項看高項(在n

2n^2

n2看來n

nn就是個弟弟)

我們可得到乙個大概描述這個時間複雜度的值 o(n

2)

o(n^2)

o(n2)

如何優化演算法

氣泡排序很穩定,但是它時間複雜度高,重複交換的太多了,如:

我這裡只能改進演算法,讓它少算一些不必要的過程,但也不能**(要高效就只能用其他演算法了)

改進1:

以上面的排序,如果我們一開始就給出的是一排好的陣列,但是陣列還是要再排一遍,所以為了解決這個問題,就要在**中放置一監視的變數。

private

static

int[

]bubblesort

(int

a)}if

(maxt)

return a;

}return a;

java 氣泡排序

氣泡排序 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算法的...

Java氣泡排序

氣泡排序 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算法的...

java 氣泡排序

氣泡排序 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較...