PHP常用排序算法實(shí)例小結(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;
}
//插入排序思想,就是從第二個(gè)元素開(kāi)始,到最后一個(gè)元素都是這個(gè)需要排序的元素
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;
}
//快速排序,找一個(gè)基準(zhǔn)點(diǎ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);
}
本文實(shí)例總結(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錯(cuò)誤與異常處理方法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
使用ThinkPHP自帶的Http類下載遠(yuǎn)程圖片到本地的實(shí)現(xiàn)代碼
Thinkphp是國(guó)人開(kāi)發(fā)一個(gè)PHP框架,該框架相比國(guó)外的一些框架也毫不遜色。強(qiáng)大的ORM,插件,分組等功能讓人愛(ài)不釋手。2011-08-08
PHP中單引號(hào)和雙引號(hào)的區(qū)別詳解
看好多代碼有時(shí)候用單引號(hào)或雙引號(hào)實(shí)現(xiàn)包含字符串的內(nèi)容,其實(shí)簡(jiǎn)單個(gè)概括下雙引號(hào)中的變量可以解析,單引號(hào)就是絕對(duì)的字符串,下面這篇文章主要給大家介紹了關(guān)于PHP中單引號(hào)和雙引號(hào)區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-01-01
php簡(jiǎn)單實(shí)現(xiàn)快速排序的方法
這篇文章主要介紹了php簡(jiǎn)單實(shí)現(xiàn)快速排序的方法,涉及php針對(duì)數(shù)組與字符串的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
ThinkPHP實(shí)現(xiàn)遞歸無(wú)級(jí)分類——代碼少
這篇文章通過(guò)一段簡(jiǎn)短的代碼實(shí)現(xiàn)了ThinkPHP實(shí)現(xiàn)遞歸無(wú)級(jí)分類,,需要的朋友可以參考下2015-07-07
PHP關(guān)聯(lián)數(shù)組的10個(gè)操作技巧
數(shù)組中的元素都有自己的ID,因此可以方便地訪問(wèn)它們;關(guān)聯(lián)數(shù)組,它的每個(gè)ID 鍵都關(guān)聯(lián)一個(gè)值;這篇文章將介紹10個(gè)操作PHP關(guān)聯(lián)數(shù)組的技巧,熟練運(yùn)用能幫助你提高開(kāi)發(fā)效率2013-01-01
php使用pclzip類實(shí)現(xiàn)文件壓縮的方法(附pclzip類下載地址)
這篇文章主要介紹了php使用pclzip類實(shí)現(xiàn)文件壓縮的方法,分析了使用pclzip類的具體步驟與實(shí)現(xiàn)文件壓縮的相關(guān)技巧,并附帶pclzip類文件的下載地址,需要的朋友可以參考下2016-04-04
php字符串函數(shù)學(xué)習(xí)之strstr()
這篇文章主要介紹了php字符串函數(shù)學(xué)習(xí)之strstr(),本文講解了它的定義和用法、參數(shù)描述、提示和注釋以及多個(gè)使用示例,需要的朋友可以參考下2015-03-03

