您好,登錄后才能下訂單哦!
<?php namespace iphp\algorithm; /** * Created by PhpStorm. * User: 123 * Date: 14-9-3 * Time: 下午3:53 */ class Sort { /** * 冒泡排序 * 算法,相鄰2個元素比較,如果前大于后者,交換位置 * 第一次比較,將最大的元素排在了最后。 * 需要n-1次冒泡 * @param $arr * @return mixed */ public static function bubble($arr) { $num=count($arr); if($num<=1) return $arr; //些標識用于判斷如果有一次沒有經過交換。那么不需要再進行下一次循環 $flag=false; for($i=0;$i<$num-1;$i++) { for($j=0;$j<$num-1-$i;$j++) { //交換元素 if($arr[$j]>$arr[$j+1]) { $tmp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$tmp; $flag=true; } } if($flag==false) break; } return $arr; } /** * 選擇排序 * 第一次,取每1-n個元素之間的最小值,與第0個元素比較,并將最小的放在前面。 * @param $arr * @return mixed */ public static function select($arr) { $num=count($arr); if($num<=1) return $arr; for($i=0;$i<$num-1;$i++) { $minValue=$arr[$i]; $minIndex=$i; for($j=$i+1;$j<$num;$j++) { if($minValue>$arr[$j]) { $minValue=$arr[$j]; $minIndex=$j; } } //交換位置 if($i!=$j) { $tmp=$arr[$i]; $arr[$i]=$minValue; $arr[$minIndex]=$tmp; } } return $arr; } /** * 插入排序 * 最開始將數組的第一個元素當作已經排序的數組。將后面的元素與已排好序的比較,將其插入到已排序中的適當位置。 * @param $arr * @return mixed */ public static function insert($arr) { $num=count($arr); if($num<=1) return $arr; for($i=1;$i<$num;$i++) { $insertValue=$arr[$i]; $insertIndex=$i-1; while($insertIndex>=0 && $insertValue<$arr[$insertIndex]) { $arr[$insertIndex+1]=$arr[$insertIndex]; $insertIndex--; } $arr[$insertIndex+1]=$insertValue; } return $arr; } /** * 快速排序 * @param $arr * @return array */ public static function quick($arr) { $num=count($arr); if($num<=1) return $arr; $middle=$arr[0]; $leftArr=array(); $rightArr=array(); for($i=1;$i<$num;$i++) { if($arr[$i]<=$middle) $leftArr[]=$arr[$i]; else $rightArr[]=$arr[$i]; } $leftArr=self::quick($leftArr); $rightArr=self::quick($rightArr); return array_merge($leftArr,array($middle),$rightArr); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。