冒泡、快速排序演算法
阿新 • • 發佈:2019-01-31
氣泡排序:
效果:
原理:
簡單來說就是兩兩比較大小一個外層迴圈裡面套一個內層迴圈
將大的數放在最後,通過迴圈實現排序
程式碼實現:
$arr=array(1,43,54,62,21,66,32,78,36,76,39); function getpao($arr) { $len=count($arr); //設定一個空陣列 用來接收冒出來的泡 //該層迴圈控制 需要冒泡的輪數 for($i=1;$i<$len;$i++) { //該層迴圈用來控制每輪 冒出一個數 需要比較的次數 for($k=0;$k<$len-$i;$k++) { if($arr[$k]>$arr[$k+1]) { $tmp=$arr[$k+1]; $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; } } } return $arr; }
print_r(getpao($arr));
結果:
Array( [0] => 1 [1] => 21 [2] => 32 [3] => 36 [4] => 39 [5] => 43 [6] => 54 [7] => 62 [8] => 66 [9] => 76 [10] => 78)
快速排序:
示例圖:
原理:
重點就是遞迴
選中一個元素為根,其他元素通過與選中元素對比大小,放入對應的陣列中,在遞迴呼叫本身將放好的陣列進行排序,最後進行合併,從而達到排序的效果
程式碼:
$arr=array(1,43,54,62,21,66,32,78,36,76,39); function quick_sort($arr) { //先判斷是否需要繼續進行 $length = count($arr); if($length <= 1) { return $arr; } //如果沒有返回,說明陣列內的元素個數 多餘1個,需要排序 //選擇一個標尺 //選擇第一個元素 $base_num = $arr[0]; //遍歷 除了標尺外的所有元素,按照大小關係放入兩個陣列內 //初始化兩個陣列 $left_array = array();//小於標尺的 $right_array = array();//大於標尺的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左邊陣列 $left_array[] = $arr[$i]; } else { //放入右邊 $right_array[] = $arr[$i]; } } //再分別對 左邊 和 右邊的陣列進行相同的排序處理方式 //遞迴呼叫這個函式,並記錄結果 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合併左邊 標尺 右邊 return array_merge($left_array, array($base_num), $right_array); } $li = quick_sort($arr); print_r($li);
結果:
y( [0] => 1 [1] => 21 [2] => 32 [3] => 36 [4] => 39 [5] => 43 [6] => 54 [7] => 62 [8] => 66 [9] => 76 [10] => 78)
二分查詢(二叉樹也時同樣的原理)
就是將排序好的資料通過對半來更加快速的查詢到目標
二分查詢:
http://www.tuicool.com/articles/2MbAR3q
http://blog.csdn.net/xzjxylophone/article/details/4714326
1,2,3,4,5,6,7
我現在要查詢7
我先取出中間數 4
判斷下是不是要找的數字,發現小了
就去右邊查詢
然後取出右邊的所有的數
取出她們幾個的中間數 6
發現還小了
繼續找右邊的陣列
找到7了 ok了!!!
最差的一種情況就是這個數字不存在 ====
1 <?php
2 #二分查詢
3 function binarySearch(Array $arr, $target) {
4 $low = 0;
5 $high = count($arr) - 1;
6
7 while($low <= $high) {
8 $mid = floor(($low + $high) / 2);
9 #找到元素
10 if($arr[$mid] == $target) return $mid;
11 #中元素比目標大,查詢左部
12 if($arr[$mid] > $target) $high = $mid - 1;
13 #重元素比目標小,查詢右部
14 if($arr[$mid] < $target) $low = $mid + 1;
15 }
16
17 #查詢失敗
18 return false;
19 }
20
21 $arr = array(1, 3, 5, 7, 9, 11);
22 $inx = binarySearch($arr, 1);
23 var_dump($inx);
24 ?>