php 實現冒泡演算法

2022-09-02 01:18:11 字數 2033 閱讀 9628

氣泡排序的基本思想是:每次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來

例如我們需要將 12 35 99 18 76 這 5個數進行從大到小的排序。既然是從大到小排序,

也就是說越小的越靠後,你是不是覺得我在說廢話,但是這句話很關鍵(∩_∩)。

首先比較第 1 位和第 2 位的大小,現在第 1 位是 12,第 2 位是 35。發現 12比 35 要小,

因為我們希望越小越靠後嘛,因此需要交換這兩個數的位置。交換之後這 5 個數的順序是

35 12 99 18 76。

按照剛才的方法,繼續比較第 2 位和第 3 位的大小,第 2位是 12,第 3位是 99。12比

99 要小,因此需要交換這兩個數的位置。交換之後這 5 個數的順序是 35 99 12 18 76。

根據剛才的規則,繼續比較第 3 位和第 4 位的大小,如果第 3 位比第 4 位小,則交換位

置。交換之後這 5 個數的順序是 35 99 18 12 76。

最後,比較第 4 位和第 5 位。4 次比較之後 5 個數的順序是 35 99 18 76 12。

經過 4 次比較後我們發現最小的乙個數已經就位(已經在最後一位,請注意 12 這個數

的移動過程),是不是很神奇。現在再來回憶一下剛才比較的過程。每次都是比較相鄰的兩

個數,如果後面的數比前面的數大,則交換這兩個數的位置。一直比較下去直到最後兩個數

比較完畢後,最小的數就在最後乙個了。就如同是乙個氣泡,一步一步往後「翻滾」,直到

最後一位。所以這個排序的方法有乙個很好聽的名字「氣泡排序」。

說到這裡其實我們的排序只將 5 個數中最小的乙個歸位了。每將乙個數歸位我們將其稱

為「一趟」。下面我們將繼續重複剛才的過程,將剩下的 4個數一一歸位。

好,現在開始「第二趟」,目標是將第 2 小的數歸位。首先還是先比較第 1 位和第 2 位,

如果第 1 位比第 2 位小,則交換位置。交換之後這 5 個數的順序是 99 35 18 76 12。接下來你

應該都會了,依次比較第 2 位和第 3 位,第 3 位和第 4 位。注意此時已經不需要再比較第 4

位和第 5 位。因為在第一趟結束後已經可以確定第 5 位上放的是最小的了。第二趟結束之後

這 5 個數的順序是 99 35 76 18 12。

「第三趟」也是一樣的。第三趟之後這 5 個數的順序是 99 76 35 18 12。

現在到了最後一趟「第四趟」。有的同學又要問了,這不是已經排好了嗎?還要繼續?

當然,這裡純屬巧合,你若用別的數試一試可能就不是了。你能找出這樣的資料樣例來嗎?

請試一試。

「氣泡排序」的原理是:每一趟只能確定將乙個數歸位。即第一趟只能確定將末位上的

數(即第 5位)歸位,第二趟只能將倒數第 2位上的數(即第 4 位)歸位,第三趟只能將倒

數第 3 位上的數(即第 3 位)歸位,而現在前面還有兩個位置上的數沒有歸位,因此我們仍

然需要進行「第四趟」。

「第四趟」只需要比較第 1 位和第 2 位的大小。因為後面三個位置上的數歸位了,現在

第 1 位是 99,第 2 位是 76,無需交換。這 5 個數的順序不變仍然是 99 76 35 18 12。到此排

序完美結束了,5 個數已經有 4 個數歸位,那最後乙個數也只能放在第 1 位了。

最後我們總結一下:如果有 n 個數進行排序,只需將 n1 個數歸位,也就是說要進行

n-1 趟操作。而「每一趟」都需要從第 1 位開始進行相鄰兩個數的比較,將較小的乙個數放

在後面,比較完畢後向後挪一位繼續比較下面兩個相鄰數的大小,重複此步驟,直到最後一

個尚未歸位的數,已經歸位的數則無需再進行比較(已經歸位的數你還比較個啥,浪費表情)。

這個演算法是不是很強悍?記得我每次拍集體照的時候就總是被別人換來換去的,當時特

別煩。不知道發明此演算法的人當時的靈感是否**於此。囉裡吧嗦地說了這麼多,下面是代

碼。建議先自己嘗試去實現一下看看,再來看我是如何實現的。

function bubblesort(&$arr)

} }}

可以看出它的時間複雜度達到了 o(n²)

PHP 遞迴實現冒泡演算法

冒泡演算法 遞迴實現 function maopao array,index 0 index return maopao array,index return maopao array,index arr array 12,4,3,1,9,5,6,8,7 var dump maopao arr ar...

PHP 遞迴實現冒泡演算法

冒泡演算法 遞迴實現 function maopao array,index 0 index return maopao array,index return maopao array,index arr array 12,4,3,1,9,5,6,8,7 var dump maopao arr ar...

php實現的冒泡演算法

氣泡排序,英語為bubble sort,台灣翻譯為泡沫排序。時間複雜度為o n 2 空間複雜度為o 1 屬於原地排序,是穩定的排序演算法。以公升序為例,氣泡排序可以這樣描述 1 比較相鄰的兩個元素,如果第乙個元素大於第二個元素,就交換他們 2 對每乙個相鄰元素進行互動,直到最後乙個。一趟下來,最大的...