個人實例很好理解 由於前幾天面試看了下別人寫的 網上搜的 總以爲不怎麼樣,因此本身寫了下整理了下php
<?php //快速排序是個十分有效的高效率算法, //其思想是先選一個標尺,用它把整個隊列過一遍篩選,以保證其餘 //左邊的元素都不大於大,其餘右邊的元素都不小於它 $arr = array(19,8,17,16,5); function quickSort($arr){ //獲取數組長度 $length = count($arr); //判斷長度是否須要繼續二分比較 if($length<=1){ return $arr; } //定義基準元素 $base = $arr[0]; //定義兩個空數組,用於存放和基準元素的比較後的結果 $left = []; $right = []; //遍歷數組 for($i=1;$i<$length;$i++){ // 和基準元素做比較 if($arr[$i]>$base){ $right[] = $arr[$i]; }else{ $left[] = $arr[$i]; } } //而後遞歸分別處理left和right $left = quickSort($left); $right =quickSort($right); //合併 return array_merge($left,[$base],$right); } $arr = quickSort($arr); print_r($arr);
② 使用右側的,能取到最大下標)比較:找到更小值,則交換位置面試
⑤ 全部比較結束,則返回數組算法
<?php $arr = array(19,8,17,16,5); echo "<pre>"; //未排序以前 print_r($arr); echo "</pre>"; echo "<hr>"; //選擇排序 升序 function select($arr){ //計算下標的範圍 $n = count($arr); //最大的下標是$n-1; //假設最小值(左側,下標比較小的)與剩下的元素(右側的元素,比假設的最小值下標至少大1)的逐一比較 for($i=0;$i<$n-1;$i++){ //假設一個元素爲最小值 $index = $i; for($j=$i+1;$j<$n;$j++){ if($arr[$index]>$arr[$j]){ //index 的值被覆蓋 //已知的最小值與剩下的元素比較 $index = $j; } } //以上的for循環執行完畢,至關於本趟執行完 //找到了一個最小值 //假設的最小值$arr[$i] //與找到的最小值交換位置$arr[$index] $tem = $arr[$i]; //初始假設的最小值 $arr[$i] = $arr[$index]; //真正的最小值 $Index 不能夠使用 (內層for循環執行完,此刻$j 爲$len-1) $arr[$index] = $tem; } return $arr; } $arr = select($arr); print_r($arr);
<?php $arr = array(19,8,17,16,5); echo "<pre>"; //未排序以前 print_r($arr); echo "</pre>"; echo "<hr>"; /** * 冒泡排序,較大的泡泡排在上面,對應的數組中,爲較大的元素放在數組的末尾,沒糖循環中,經過兩兩比較,將較大的元素放在右側 * * 第幾輪 外層循環的次數,數組的長度-1; * 內層循環:比較次數,長度-1-第幾輪 * @var [type] */ $n = count($arr); //for 外層循環 for ($i=0; $i <$n-1 ; $i++) { //內層循環,每一步比上一次少一次比較 for ($j=0; $j <$n-1-$i ; $j++) { if($arr[$j]>$arr[$j+1]){ $tem = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $tem; } } } echo "<pre>"; // 冒泡排序以後 print_r($arr); echo "</pre>"; echo "<hr>";