原理:對一組資料,比較相鄰資料的大小,將值小資料在前面,值大的資料放在後面。 (以下都是公升序排列,即從小到大排列)
舉例說明: $arr = array(6, 3, 8, 2, 9, 1);
$arr 有6個資料,按照兩兩比較大小如下,注意 比較輪數 和 每輪比較次數
第一輪排序:
第一次比較 6和3比較 結果:3 6 8 2 9 1
第二次比較 6和3比較 結果:3 6 8 2 9 1
第三次比較 8和2比較 結果:3 6 2 8 9 1
第四次比較 8和9比較 結果:3 6 2 8 9 1
第五次比較 9和1比較 結果:3 6 2 8 1 9
第一輪比較總結:1.排序第1輪、比較5次,沒有獲得從小到大的排序 2.因為每次比較都是大數往後靠,所以比較完成後,可以確定大數排在最後(9 已經冒泡冒出來了,下輪比較可以不用比較了 )
第二輪排序:
第一次比較 3和6比較 結果:3 6 2 8 1 9
第二次比較 6和2比較 結果:3 2 6 8 1 9
第三次比較 6和8比較 結果:3 2 6 8 1 9
第四次比較 8和1比較 結果:3 2 6 1 8 9
第二輪比較總結:1.排序第2輪、比較4次,沒有獲得從小到大的排序 2.冒泡出了 8,下輪不用比較8 了
第三輪排序:
第一次比較 3和2比較 結果:2 3 6 1 8 9
第二次比較 3和6比較 結果:2 3 6 1 8 9
第三次比較 6和1比較 結果:2 3 1 6 8 9
第三輪比較總結:1.排序第3輪、比較3次,沒有獲得從小到大的排序 2.冒泡出了 6,下輪不用比較6 了
第四輪排序:
第一次比較 2和3比較 結果:2 3 1 6 8 9
第二次比較 3和1比較 結果:2 1 3 6 8 9
第四輪比較總結:1.排序第4輪、比較2次,沒有獲得從小到大的排序 2.冒泡出了 3,下輪不用比較3 了
第五輪排序:
第一次比較 2和1比較 結果:1 2 3 6 8 9
第五輪比較總結:1.排序第5輪、比較1次,沒有獲得從小到大的排序 2.冒泡出了 2,由於還剩乙個1,不用再比較了,至此通過5輪排序,完成整個排序。
通過以上五輪排序,若干次比較,我們有理由推斷出乙個結論:
對於乙個長度為n的陣列,我們需要排序 n-1 輪,每 i 輪 要比較 n-i 次。對此我們可以用雙重迴圈語句,外層迴圈控制迴圈輪次,內層迴圈控制每輪的比較次數。
python版本
# *_*coding:utf-8 *_*
#對於乙個長度為n的陣列,我們需要排序 n-1 輪,每 i 輪 要比較 n-i 次。對此我們可以用雙重迴圈語句,外層迴圈控制迴圈輪次,內層迴圈控制每輪的比較次數
def bubble_sort(sort_list,sort='asc'):
if len(sort_list) <= 0:
return
count = len(sort_list)
sorted_list = sort_list
for i in range(0,count-1):
print('第%d趟排序:' % (i + 1))
php版本
<?php
/** * created by phpstorm.
* user: mac
* date: 2018/10/9
* time: 22:39
*//**
* @author brady
* @desc 氣泡排序
* @param $arr 待排序的陣列
* @param string $sort 排序方式 asc 公升序 desc降序
* @time 2018/10/9
* 一共要外層迴圈n-1次 內層迴圈每次外層迴圈一次 最後乙個會不需要排序 n-i-1次
*/function bubble_sort($arr,$sort='asc')
} else } echo "第".($i+1)."輪迴圈 後陣列排序為:".json_encode($arr)."
"; } echo ""; } return $arr; } /** * @author brady * @desc 氣泡排序 * @param $arr 待排序的陣列 * @param string $sort 排序方式 asc 公升序 desc降序 * @time 2018/10/9 * 從最後乙個進行冒泡 把最大的冒泡到最左邊 第一次 冒泡後 第二次 最左邊的乙個已經合格 內層迴圈少一次 所以為 只迴圈 $j>$i */ function bubble_sort2($arr,$sort='asc') } else } echo "第".($i+1)."輪迴圈 後陣列排序為:".json_encode($arr)."
排序之氣泡排序
例 將5個數字進行從大到小排序後輸出。輸入 35 99 18 12 76 輸出 99 76 35 18 12 對於例,氣泡排序大致的思路就是一趟一趟地迴圈比較,每一次迴圈的目的都是將未排序的數字中最小的數字移動到末尾。如 第一趟 xx xx xx xx 12 第二趟 xx xx xx 18 12 第...
排序之 氣泡排序
先科普一下到底什麼是氣泡排序 氣泡排序到底能幹嘛?氣泡排序 bubble sort 是一種 電腦科學領域的較簡單的 排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字...
排序之氣泡排序
氣泡排序是一種交換排序。什麼是交換排序呢?交換排序 兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。演算法思想它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成...