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連接mssql的一些相關(guān)經(jīng)驗及注意事項
php連接mssql對于很多朋友或許已經(jīng)是老生長談,習以為常了,不過本文還是要嘮叨一下,主要以分享連接數(shù)據(jù)庫的相關(guān)經(jīng)驗,感興趣的你可千萬不要錯過,或許本文對你有所幫助呢2013-02-02PHP PDOStatement::setFetchMode講解
今天小編就為大家分享一篇關(guān)于PHP PDOStatement::setFetchMode講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02PHP創(chuàng)建word文檔的方法(平臺無關(guān))
這篇文章主要介紹了PHP創(chuàng)建word文檔的方法,結(jié)合實例形式分析了與平臺無關(guān)的生成word文檔的方法,非常簡單實用,需要的朋友可以參考下2016-03-03PHP編程求最大公約數(shù)與最小公倍數(shù)的方法示例
這篇文章主要介紹了PHP編程求最大公約數(shù)與最小公倍數(shù)的方法,涉及php數(shù)學計算的相關(guān)運算技巧,需要的朋友可以參考下2017-05-05php運行報錯Call to undefined function curl_init()的最新解決方法
其實在網(wǎng)上很早之前就出現(xiàn)過這個問題,網(wǎng)上百度了下,答案千篇一律,最近又遇到這個問題,但是百度出來的問題不能解決這個問題了,所以只能翻墻找答案,現(xiàn)在將解決的方法分享給大家,有需要的朋友們可以參考借鑒,下面來一起學習學習吧。2016-11-11shopex主機報錯誤請求解決方案(No such file or directory)
最近vps客戶和服務托管客戶安裝了shopex網(wǎng)店系統(tǒng),他們的主機都報錯,錯誤特點一樣,針對這個錯誤我司技術(shù)推出shopex主機報錯誤請求解決方案,希望能給予各位一點幫助2011-12-12