php實現(xiàn)快速排序法函數(shù)代碼
更新時間:2012年08月27日 15:56:44 作者:
取一個值與其他值進行比較,小的放在這個值的左邊,大的放在這個值的右邊,然后按照這個方式遞歸
代碼1:
<?php
function quicksort($str){
if(count($str)<=1) return $str;//如果個數(shù)不大于一,直接返回
$key=$str[0];//取一個值,稍后用來比較;
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($str);$i++){//比$key大的放在右邊,小的放在左邊;
if($str[$i]<=$key)
$left_arr[]=$str[$i];
else
$right_arr[]=$str[$i];
}
$left_arr=quicksort($left_arr);//進行遞歸;
$right_arr=quicksort($right_arr);
return array_merge($left_arr,array($key),$right_arr);//將左中右的值合并成一個數(shù)組;
}//以下是測試
$str=array(5,3,8,2,5,9,7,2,1,4,0);
print_r(quicksort($str));
?>
代碼2:
/* @快速排序法*/
function quickSort($left,$right,$arr){
$l = $left;
$r = $right;
$pivot = $arr[($left+$right)/2];
$temp = 0;
while($l<$r){
while($arr[$l]<$pivot){
$l++;
}
while($arr[$r]>$pivot){
$r--;
}
if($l>=$r) break;
$temp = $arr[$l];
$arr[$l] = $arr[$r];
$arr[$r] = $temp;
if($arr[$l]==$pivot) --$r;
if($arr[$r]==$pivot) ++$l;
}
if($l==$r){
$l++;
$r--;
}
if($left<$r){
quickSort($left, $r, $arr);
}elseif($right>$l){
quickSort($l, $right, $arr);
}else{
return $arr;
}
}
復制代碼 代碼如下:
<?php
function quicksort($str){
if(count($str)<=1) return $str;//如果個數(shù)不大于一,直接返回
$key=$str[0];//取一個值,稍后用來比較;
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($str);$i++){//比$key大的放在右邊,小的放在左邊;
if($str[$i]<=$key)
$left_arr[]=$str[$i];
else
$right_arr[]=$str[$i];
}
$left_arr=quicksort($left_arr);//進行遞歸;
$right_arr=quicksort($right_arr);
return array_merge($left_arr,array($key),$right_arr);//將左中右的值合并成一個數(shù)組;
}//以下是測試
$str=array(5,3,8,2,5,9,7,2,1,4,0);
print_r(quicksort($str));
?>
代碼2:
復制代碼 代碼如下:
/* @快速排序法*/
function quickSort($left,$right,$arr){
$l = $left;
$r = $right;
$pivot = $arr[($left+$right)/2];
$temp = 0;
while($l<$r){
while($arr[$l]<$pivot){
$l++;
}
while($arr[$r]>$pivot){
$r--;
}
if($l>=$r) break;
$temp = $arr[$l];
$arr[$l] = $arr[$r];
$arr[$r] = $temp;
if($arr[$l]==$pivot) --$r;
if($arr[$r]==$pivot) ++$l;
}
if($l==$r){
$l++;
$r--;
}
if($left<$r){
quickSort($left, $r, $arr);
}elseif($right>$l){
quickSort($l, $right, $arr);
}else{
return $arr;
}
}
您可能感興趣的文章:
- php中利用explode函數(shù)分割字符串到數(shù)組
- php數(shù)組函數(shù)序列之a(chǎn)rray_keys() - 獲取數(shù)組鍵名
- php數(shù)組查找函數(shù)in_array()、array_search()、array_key_exists()使用實例
- php中刪除數(shù)組的第一個元素和最后一個元素的函數(shù)
- PHP 查找字符串常用函數(shù)介紹
- PHP字符串比較函數(shù)strcmp()和strcasecmp()使用總結(jié)
- PHP中常用的字符串格式化函數(shù)總結(jié)
- php數(shù)組函數(shù)序列之a(chǎn)rray_push() 數(shù)組尾部添加一個或多個元素(入棧),返回新長度。
- php array_push()數(shù)組函數(shù):將一個或多個單元壓入數(shù)組的末尾(入棧)
- php array_pop()數(shù)組函數(shù)將數(shù)組最后一個單元彈出(出棧)
- PHP中的排序函數(shù)sort、asort、rsort、krsort、ksort區(qū)別分析
- php常用經(jīng)典函數(shù)集錦【數(shù)組、字符串、棧、隊列、排序等】
相關(guān)文章
解決php使用異步調(diào)用獲取數(shù)據(jù)時出現(xiàn)(錯誤c00ce56e導致此項操作無法完成)
本篇文章是對php中使用異步調(diào)用獲取數(shù)據(jù)時出現(xiàn)(由于出現(xiàn)錯誤c00ce56e而導致此項操作無法完成)的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-07-07
PHP中數(shù)組轉(zhuǎn)換為SimpleXML教程
在本篇文章中我們給大家總結(jié)了一篇關(guān)于PHP中數(shù)組轉(zhuǎn)換為SimpleXML教程內(nèi)容,有需要的朋友們跟著學習參考下。2019-01-01
PHP操作MySQL的mysql_fetch_* 函數(shù)的常見用法教程
這篇文章主要介紹了PHP中操作MySQL的mysql_fetch函數(shù)的常見用法教程,文中提到了其下fetch_array和mysql_fetch_row以及mysql_fetch_object函數(shù)的使用,需要的朋友可以參考下2015-12-12
PHP使用OCR技術(shù)實現(xiàn)識別圖片中的文字
OCR是一種通過圖像處理技術(shù)從圖片或掃描件中提取文字的技術(shù),它可以將非結(jié)構(gòu)化的圖片內(nèi)容轉(zhuǎn)化為可編輯的文本,下面我們就來看看PHP如何OCR識別圖片中的文字2024-11-11
PHP將session信息存儲到數(shù)據(jù)庫的類實例
這篇文章主要介紹了PHP將session信息存儲到數(shù)據(jù)庫的類,實例分析了php封裝的session信息存儲到數(shù)據(jù)庫的類,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03

