PHP常用排序算法實例小結(jié)【基本排序,冒泡排序,快速排序,插入排序】
php三種基礎(chǔ)算法:冒泡,插入和快速排序法
$array = array(2,3,5,6,9,8,1);
//冒泡排序思想,前后元素比較
function sort_bulldle($array){
$num = count($array);
for($i=0; $i<$num; $i++){
$tmp = $array[$i];
for ($j=$i-1; $j>=0; $j--) {
if ($tmp < $array[$j]) {
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
} else {
break;
}
}
}
return $array;
}
//插入排序思想,就是從第二個元素開始,到最后一個元素都是這個需要排序的元素
function sort_bulldle($arr){
for($i=1, $len=count($arr); $i<$len; $i++) {
$tmp = $arr[$i];
for($j=$i-1;$j>=0;$j--) {
if($tmp < $arr[$j]) {
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
} else {
break;
}
}
}
return $arr;
}
//快速排序,找一個基準(zhǔn)點把數(shù)組分成兩組比較
function sort_bulldle($array){
$num = count($array);
if($num<=1) {
return $array;
}
$base_num = $array[0];
$left_array = array();
$right_array = array();
for($i=1; $i<$num; $i++) {
if ($base_num > $array[$i]) {
$left_array[] = $array[$i];
}else
{
$right_array[] = $array[$i];
}
}
$left_array = sort_bulldle($left_array);
$right_array = sort_bulldle($right_array);
return array_merge($left_array, array($base_num), $right_array);
}
本文實例總結(jié)了PHP常用排序算法。分享給大家供大家參考,具體如下:
class bevin{
public $public = 'public';
private $private = 'private';
protected $protected = 'protected';
//final $final = 'final';
static $static = 'static';
function __construct(){
$this->protected = 'change private';
}
public function setValue($a){
self::$static = $a;
}
public function getValue(){
echo $this->private;
}
function __destruct(){
echo 'asdfsadf';
}
}
class paixu {
// 基本排序
public function t_sortArray($array) {
if(is_array($array) && count($array)>1) {
for($i=0; $i<count($array); $i++) {
for($j=($i+1); $j<count($array); $j++) {
$temp = $array[$i];
if($array[$j]<$array[$i]) {
$array[$i] = $array[$j];
$array[$j] = $temp;
}
}
}
return $array;
} else {
return $array;
}
}
// 冒泡排序
public function c_sortArray($array) {
if(!is_array($array) || count($array)<=1){ return $array; }
$status = false;
foreach($array as $key=>$v) {
if($key>0) {
if($array[$key-1]>$array[$key]) {
$array[$key] = $array[$key-1];
$array[$key-1] = $v;
$status = true;
}
}
}
if($status) {
return $this->c_sortArray($array);
} else {
return $array;
}
}
// 快速排序
public function v_sortArray($array) {
if(!is_array($array) || count($array)<=1){ return $array; }
if(count($array)>2) {
$m = $array[floor(count($array)/2)+1];
} else {
if($array[0]>$array[1]) {
$temp = $array[0];
$array[0] = $array[1];
$array[1] = $temp;
}
return $array;
}
$leftarray = array();
$rightarray = array();
foreach($array as $key=>$v) {
if($v>$m) {
$rightarray[] = $v;
}
if($v<$m) {
$leftarray[] = $v;
}
if($v==$m) {
$mid[] = $v;
}
}
$nleftarray = $this->v_sortArray($leftarray);
$nrightarray = $this->v_sortArray($rightarray);
return array_merge($nleftarray,$mid,$nrightarray);
}
// 直接插入排序
public function i_sortArray($array) {
if(!is_array($array) || count($array)<=1){ return $array; }
$newarray = array($array[0]);
$temp = 0;
foreach($array as $k=>$v) {
if($k>0) {
if($v>=$newarray[count($newarray)-1]) {
$newarray[] = $v;
} else {
foreach($newarray as $nk=>$nv) {
if($v<$nv) {
$temparray = array();
foreach($newarray as $ck=>$cv) {
if($ck<$nk) {
$temparray[$ck] = $cv;
} elseif($ck==$nk) {
$temparray[$ck] = $v;
$temparray[($ck+1)] = $cv;
} else {
$temparray[($ck+1)] = $cv;
}
}
$newarray = $temparray;
break;
}
}
}
}
}
return $newarray;
}
}
$bevin = new paixu;
$array = array(5,4,5,4,4,5,5,5,5,5);
$v = $bevin->t_sortArray($array);
print_r($v);
$v = $bevin->c_sortArray($array);
print_r($v);
$v = $bevin->v_sortArray($array);
print_r($v);
$v = $bevin->i_sortArray($array);
print_r($v);
運(yùn)行結(jié)果:
Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 ) Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 ) Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 ) Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 )
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php排序算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php常用函數(shù)與技巧總結(jié)》、《PHP錯誤與異常處理方法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
PHP關(guān)聯(lián)數(shù)組實現(xiàn)根據(jù)元素值刪除元素的方法
這篇文章主要介紹了PHP關(guān)聯(lián)數(shù)組實現(xiàn)根據(jù)元素值刪除元素的方法,實例分析了php差集運(yùn)算函數(shù)array_diff及數(shù)組遍歷對比刪除的兩種方法,需要的朋友可以參考下2015-06-06
PHP中$GLOBALS[''HTTP_RAW_POST_DATA'']和$_POST的區(qū)別分析
這篇文章主要介紹了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的區(qū)別,結(jié)合具體實例形式分析了$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的功能與使用過程中的區(qū)別,需要的朋友可以參考下2017-07-07
php將textarea數(shù)據(jù)提交到mysql出現(xiàn)很多空格的解決方法
這篇文章主要介紹了php將textarea數(shù)據(jù)提交到mysql出現(xiàn)很多空格的解決方法,分析了空格出現(xiàn)的原因以及刪除空格的簡單實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下2014-12-12
PHP錯誤Cannot use object of type stdClass as array in錯誤的解決辦法
很多人在PHP輸出一個二維數(shù)組的時候出現(xiàn)“Fatal error: Cannot use object of type stdClass as array in……”。這篇文章主要介紹了該錯誤的解決辦法,需要的朋友可以參考下2014-06-06
PHP計算當(dāng)前坐標(biāo)3公里內(nèi)4個角落的最大最小經(jīng)緯度實例
這篇文章主要介紹了PHP計算當(dāng)前坐標(biāo)3公里內(nèi)4個角落的最大最小經(jīng)緯度的方法,涉及PHP數(shù)學(xué)運(yùn)算的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-02-02

