php實現氣泡排序

2021-07-31 22:15:45 字數 1429 閱讀 3270

氣泡排序很簡單,就是不斷地交換相鄰的數,使得最大的數排在最後面,即一次迴圈可以確定最大乙個數的排序位置。

php**實現:

function

bubble

(&$arr)}}

}

關於上面的swap函式,做一下備註:

swap很多人用異或來實現,如下:

function

swap

(&$a,&$b)

但是這種方法有個缺陷,就是當兩個引數都指向乙個變數位址時,異或得到結果是0
function

swap

(&$a,&$b)

若是非要用異或
來實現,就加個限制條件:

function

swap

(&$a,&$b)

}

再說一說上面的冒泡的缺陷:

如果有如下的陣列array(4,3,2,1,5,6,7,8,9);,那麼冒泡的每一步如下:

第1步: 3 2 1 4 5 6 7 8 9 

第2步: 2 1 3 4 5 6 7 8 9

第3步: 1 2 3 4 5 6 7 8 9

第4步: 1 2 3 4 5 6 7 8 9

第5步: 1 2 3 4 5 6 7 8 9

第6步: 1 2 3 4 5 6 7 8 9

第7步: 1 2 3 4 5 6 7 8 9

第8步: 1 2 3 4 5 6 7 8 9

發現了沒有,當到第三步時,排序已經完成,但是氣泡排序還在做無用功。

所以,改進以下氣泡排序演算法:設定乙個標誌變數,如果第n步的內部迴圈未發生交換,則證明排序已經完成:

function

bubble

(&$arr)

}if(!$flag)

}}

輸出一下遍歷順序:

第1步: 3 2 1 4 5 6 7 8 9 

第2步: 2 1 3 4 5 6 7 8 9

第3步: 1 2 3 4 5 6 7 8 9

還可以進一步改進,可以發現,僅前面4個是無序的,後5個都是有序,且都大於前面的數。那麼在第一趟遍歷後,最後發生交換的位置必定小於4,且這個位置之後的資料必定已經有序了,記錄下這位置,第二次只要從陣列頭部遍歷到這個位置就可以了。

function

bubble

(&$arr)}}

}

氣泡排序畢竟是一種效率低下的排序方法,在資料規模很小時,可以採用。資料規模比較大時,最好用其它排序方法。

php實現氣泡排序

乙個程式應包括 對資料的描述 在程式中要指定資料的型別和資料的組織形式,即資料結構 data structure 對操作的描述 即操作步驟,也就是演算法 algorithm nikiklaus wirth提出的公式 程式 資料結構 演算法 作為乙個程式設計師必須得懂點演算法啊,就從最簡單的開始吧 氣...

php實現氣泡排序

一 問題 氣泡排序,c裡基礎演算法,從小到大對一組數排序。二 截圖 三 思路 這題從小到大,第一輪排最小,第二輪排第二小,第三輪排第三小,依次類推 1 2 arr array 1,3,5,32,756,2,6 3 len count arr 4 for i 0 i 12 13var dump arr...

PHP實現 氣泡排序

created by phpstorm.user baimayou date 19 4 6 time 下午2 45 氣泡排序 原理 每次氣泡排序都會對相鄰兩個元素進行比較,每趟氣泡排序都會選出最大的資料到末尾 解法 因為是兩兩交換,所以不需要設定最大值,每次八比較的相鄰元素中的最大值放在靠後的位置即...