排序學習之 氣泡排序

2021-09-07 20:05:46 字數 3466 閱讀 2850

原理:對一組資料,比較相鄰資料的大小,將值小資料在前面,值大的資料放在後面。   (以下都是公升序排列,即從小到大排列)

舉例說明: $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 是一種 電腦科學領域的較簡單的 排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字...

排序之氣泡排序

氣泡排序是一種交換排序。什麼是交換排序呢?交換排序 兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。演算法思想它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成...