導航:首頁 > 編程語言 > php快速排序代碼

php快速排序代碼

發布時間:2023-03-10 22:43:45

php快速排序法不太懂,求指教。。。

直接用sort函數排序不就完了,寫這么多代碼作什麼呢?

sort($arr);

再輸出結果看看,已經就排好了。

<?php
$arr=array(5,7,2,10,8,1);
sort($arr);
var_mp($arr);
//結果便已經按1257810這樣排序了。
//如果非要學習遞歸的排序,見下面代碼

functionsorttest($ar){
$tmparr=array();
if(count($ar)<=1)return$ar;
$tmp=array_rand($ar);
foreach($aras$v){
if($v>$ar[$tmp]){
$right[]=$v;
}else{
$left[]=$v;
}
}
if(!empty($left)){
if(count($left)<=1){
$tmparr[]=$left[0];
}else{
$tmparr=array_merge($tmparr,sorttest($left));
}
}
if(!empty($right)){
if(count($right)<=1){
$tmparr[]=$right[0];
}else{
$tmparr=array_merge($tmparr,sorttest($right));
}
}
return$tmparr;
}

?>

居然有朋友在評論里要求,就滿足了這位朋友的需求。

Ⅱ thinkphp如何實現快速排序

thinkphp使用的資料庫是mysql,mysql多個欄位排序的語句:
select
* from `表名` where 條件 order by 欄位1 desc,欄位2
asc,...
thinkphp中排序方法為
$User->where('score>0')->order('score desc')....;
但是例子中只能單欄位排序,不過可以理解成字元串,那就可以這樣寫試試
$User->where('score>0')->order('score desc,id asc,...')....;

Ⅲ PHP中的快速排序演算法如何實現倒序

/*
php中的快速排序,並且倒序輸出
*/
function quickSort($array)
{
if(!isset($array[1]))
return $array;
$mid = $array[0]; //獲取一個用於分割的關鍵字,一般是首個元素
$leftArray = array();
$rightArray = array();

foreach($array as $v)
{
if($v > $mid)
$rightArray[] = $v; //把比$mid大的數放到一個數組里
if($v < $mid)
$leftArray[] = $v; //把比$mid小的數放到另一個數組里
}

$leftArray = quickSort($leftArray); //把比較小的數組再一次進行分割
$leftArray[] = $mid; //把分割的元素加到小的數組後面,不能忘了它哦

$rightArray = quickSort($rightArray); //把比較大的數組再一次進行分割
return array_reverse(array_merge($leftArray,$rightArray)); //組合兩個結果後倒序排列
}

Ⅳ php幾種排序演算法實例詳解

四種排序演算法的PHP實現:
1)插入排序(InsertionSort)的基本思想是:
每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子文件中的適當位置,直到全部記錄插入完成為止。

2)選擇排序(SelectionSort)的基本思想是:
每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子文件的最後,直到全部記錄排序完畢。

3)冒泡排序的基本思想是:
兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。

4)快速排序實質上和冒泡排序一樣,都是屬於交換排序的一種應用。所以基本思想和上面的冒泡排序是一樣的。

1.sort.php文件如下:

<?php
classSort{
private$arr=array();
private$sort='insert';
private$marker='_sort';
private$debug=TRUE;
/**
*構造函數
*
*@paramarray例如:
$config=array(
'arr'=>array(22,3,41,18),//需要排序的數組值
'sort'=>'insert',//可能值:insert,select,bubble,quick
'debug'=>TRUE//可能值:TRUE,FALSE
)
*/
publicfunctionconstruct($config=array()){
if(count($config)>0){
$this->_init($config);
}
}
/**
*獲取排序結果
*/
publicfunctiondisplay(){
return$this->arr;
}
/**
*初始化
*
*@paramarray
*@returnbool
*/
privatefunction_init($config=array()){
//參數判斷
if(!is_array($config)ORcount($config)==0){
if($this->debug===TRUE){
$this->_log("sort_init_param_invaild");
}
returnFALSE;
}
//初始化成員變數
foreach($configas$key=>$val){
if(isset($this->$key)){
$this->$key=$val;
}
}
//調用相應的成員方法完成排序
$method=$this->sort.$this->marker;
if(!method_exists($this,$method)){
if($this->debug===TRUE){
$this->_log("sort_method_invaild");
}
returnFALSE;
}
if(FALSE===($this->arr=$this->$method($this->arr)))
returnFALSE;
returnTRUE;
}
/**
*插入排序
*
*@paramarray
*@returnbool
*/
privatefunctioninsert_sort($arr){
//參數判斷
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(insert)_invaild");
}
returnFALSE;
}
//具體實現
$count=count($arr);
for($i=1;$i<$count;$i++){
$tmp=$arr[$i];
for($j=$i-1;$j>=0;$j--){
if($arr[$j]>$tmp){
$arr[$j+1]=$arr[$j];
$arr[$j]=$tmp;
}
}
}
return$arr;
}
/**
*選擇排序
*
*@paramarray
*@returnbool
*/
privatefunctionselect_sort($arr){
//參數判斷
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(select)_invaild");
}
returnFALSE;
}
//具體實現
$count=count($arr);
for($i=0;$i<$count-1;$i++){
$min=$i;
for($j=$i+1;$j<$count;$j++){
if($arr[$min]>$arr[$j])$min=$j;
}
if($min!=$i){
$tmp=$arr[$min];
$arr[$min]=$arr[$i];
$arr[$i]=$tmp;
}
}
return$arr;
}
/**
*冒泡排序
*
*@paramarray
*@returnbool
*/
privatefunctionbubble_sort($arr){
//參數判斷
if(!is_array($arr)ORcount($arr)==0){
if($this->debug===TRUE){
$this->_log("sort_array(bubble)_invaild");
}
returnFALSE;
}
//具體實現
$count=count($arr);
for($i=0;$i<$count;$i++){
for($j=$count-1;$j>$i;$j--){
if($arr[$j]<$arr[$j-1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j-1];
$arr[$j-1]=$tmp;
}
}
}
return$arr;
}
/**
*快速排序
*@bywww.5wx.org
*@paramarray
*@returnbool
*/
privatefunctionquick_sort($arr){
//具體實現
if(count($arr)<=1)return$arr;
$key=$arr[0];
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($arr);$i++){
if($arr[$i]<=$key)
$left_arr[]=$arr[$i];
else
$right_arr[]=$arr[$i];
}
$left_arr=$this->quick_sort($left_arr);
$right_arr=$this->quick_sort($right_arr);

returnarray_merge($left_arr,array($key),$right_arr);
}
/**
*日誌記錄
*/
privatefunction_log($msg){
$msg='date['.date('Y-m-dH:i:s').']'.$msg.' ';
return@file_put_contents('sort_err.log',$msg,FILE_APPEND);
}
}
/*Endoffilesort.php*/
/*Locationhtdocs/sort.php*/
2.sort_demo.php文件如下:

<?php
require_once('sort.php');
$config=array(
'arr'=>array(23,22,41,18,20,12,200303,2200,1192),
//需要排序的數組值
'sort'=>'select',
//可能值:insert,select,bubble,quick
'debug'=>TRUE
//可能值:TRUE,FALSE
);
$sort=newSort($config);
//var_mp($config['arr']);
var_mp($sort->display());
/*Endofphp*/

Ⅳ PHP實現常見的排序演算法

註:為方便描述,下面的排序全為正序(從小到大排序)

假設有一個數組[a,b,c,d]
冒泡排序依次比較相鄰的兩個元素,如果前面的元素大於後面的元素,則兩元素交換位置;否則,位置不變。具體步驟:
1,比較a,b這兩個元素,如果a>b,則交換位置,數組變為:[b,a,c,d]
2,比較a,c這兩個元素,如果a<c,則位置不變,數組變為:[b,a,c,d]
3,比較c,d這兩個元素,如果c>d,則交換位置,數組變為:[b,a,d,c]
完成第一輪比較後,可以發現最大的數c已經排(冒)在最後面了,接著再進行第二輪比較,但第二輪比較不必比較最後一個元素了,因為最後一個元素已經是最大的了。
第二輪比較結束後,第二大的數也會冒到倒數第二的位置。
依次類推,再進行第三輪,,,
就這樣最大的數一直往後排(冒),最後完成排序。所以我們稱這種排序演算法為冒泡排序。

選擇排序是一種直觀的演算法,每一輪會選出列中最小的值,把最小值排到前面。具體步驟如下:

插入排序步驟大致如下:

快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的數據,可以決定設計的選擇,減少所需時間的二次方項之可能性。

步驟:
從數列中挑出一個元素,稱為 「基準」(pivot),
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。
遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

Ⅵ PHP快速排序演算法實現的原理及代碼詳解

演算法原理
下列動圖來自五分鍾學演算法,演示了快速排序演算法的原理和步驟。
步驟:
從數組中選個基準值
將數組中大於基準值的放同一邊、小於基準值的放另一邊,基準值位於中間位置
遞歸的對分列兩邊的數組再排序
代碼實現
function
quickSort($arr)
{
$len
=
count($arr);
if
($len
<=
1)
{
return
$arr;
}
$v
=
$arr[0];
$low
=
$up
=
array();
for
($i
=
1;
$i
<
$len;
++$i)
{
if
($arr[$i]
>
$v)
{
$up[]
=
$arr[$i];
}
else
{
$low[]
=
$arr[$i];
}
}
$low
=
quickSort($low);
$up
=
quickSort($up);
return
array_merge($low,
array($v),
$up);
}
測試代碼:
$startTime
=
microtime(1);
$arr
=
range(1,
10);
shuffle($arr);
echo
"before
sort:
",
implode(',
',
$arr),
"\n";
$sortArr
=
quickSort($arr);
echo
"after
sort:
",
implode(',
',
$sortArr),
"\n";
echo
"use
time:
",
microtime(1)
-
$startTime,
"s\n";
測試結果:
before
sort:
1,
7,
10,
9,
6,
3,
2,
5,
4,
8
after
sort:
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
use
time:
0.0009009838104248s
時間復雜度
快速排序的時間復雜度在最壞情況下是O(N2),平均的時間復雜度是O(N*lgN)。
這句話很好理解:假設被排序的數列中有N個數。遍歷一次的時間復雜度是O(N),需要遍歷多少次呢?至少lg(N+1)次,最多N次。
1)
為什麼最少是lg(N+1)次?快速排序是採用的分治法進行遍歷的,我們將它看作一棵二叉樹,它需要遍歷的次數就是二叉樹的深度,而根據完全二叉樹的定義,它的深度至少是lg(N+1)。因此,快速排序的遍歷次數最少是lg(N+1)次。
2)
為什麼最多是N次?這個應該非常簡單,還是將快速排序看作一棵二叉樹,它的深度最大是N。因此,快讀排序的遍歷次數最多是N次。
您可能感興趣的文章:PHP快速排序演算法實例分析PHP四種排序演算法實現及效率分析【冒泡排序,插入排序,選擇排序和快速排序】PHP排序演算法之快速排序(Quick
Sort)及其優化演算法詳解PHP遞歸實現快速排序的方法示例php
二維數組快速排序演算法的實現代碼PHP常用排序演算法實例小結【基本排序,冒泡排序,快速排序,插入排序】PHP快速排序quicksort實例詳解

Ⅶ 用php程序編寫冒泡排序、快速排序

不要做這些作業,如果你想學好PHP的話,因為PHP有更高效的函數可以直接調用完成排序,對於學習PHP來說,知道系統函數並熟練調用才是能力,冒泡法這樣的浪費光陰的東西,不可能在任何一個PHP項目中使用。

Ⅷ php數據結構與演算法(PHP描述) 快速排序 quick sort

復制代碼
代碼如下:
<?php
/**
*
快速排序
quick
sort
*
**/
function
sort_quick($arrData)
{
if(empty($arrData)
||
!is_array($arrData))
return
false;
$flag
=
$arrData[0];
$len
=
count($arrData)
-
1;
if($len
==
0)
return
$arrData;
//
如果只有一個數據的數組直接返回
$arrLeft
=
array();
$arrRight
=
array();
$len_l
=
0;
$len_r
=
0;
for($i
=
1;
$i
<=
$len;$i++)
{
if($arrData[$i]
<
$flag)
{
$arrLeft[$len_l]
=
$arrData[$i];
//
小於的放左邊
$len_l++;
}
else
{
$arrRight[$len_r]
=
$arrData[$i];
//
大於等於的放右邊
$len_r++;
}
}
//
合並數組
$arrResult
=
array();
if($len_l)
{
$arrLeft
=
sort_quick($arrLeft);
for($i
=
0;$i
<=
$len_l
-
1;
$i++
)
{
$arrResult[$i]
=
$arrLeft[$i];
}
}
$arrResult[$len_l]
=
$flag;
$len_l++;
if($len_r)
{
$arrRight
=
sort_quick($arrRight);
for($i
=
0;$i
<=
$len_r
-
1;
$i++
)
{
$arrResult[$len_l]
=
$arrRight[$i];
$len_l++;
}
}
echo
"==
",$flag,"
==========================================<br/>";
echo
"data
:
",print_r($arrData),"<br/>";
echo
"filter
left:
",print_r($arrLeft),"<br/>";
echo
"filter
right:
",print_r($arrRight),"<br/>";
echo
"return
:
",print_r($arrResult),"<br/>";
return
$arrResult;
}
//$list
=
array(4,3,2,1,5,7,3,7);
$list
=
array(4,51,6,73,2,5,9,33,50,3,4,6,1,4,67);
$list
=
sort_quick($list);
echo
"<pre>";print_r($list);

Ⅸ PHP實現常見排序

//插入排序(一維數組) function insert_sort($arr){ $count = count($arr); for($i= ; $i<$count; $i++){ $tmp = $arr[$i]; $j = $i ; while($arr[$j] > $tmp){ $arr[$j+ ] = $arr[$j]; $arr[$j] = $tmp; $j ; } } return $arr; } //選擇排序(一維數組) function select_sort($arr){ $count = count($arr); for($i= ; $i<$count; $i++){ $k = $i; for($j=$i+ ; $j<$count; $j++){ if ($arr[$k] > $arr[$j]) $k = $j; if ($k != $i){ $tmp = $arr[$i]; $arr[$i] = $arr[$k]; $arr[$k] = $tmp; } } } return $arr; } //冒泡排序(一維數組) function bubble_sort($array){ $count = count($array); if ($count <= ) return false; for($i= ; $i<$count; $i++){ for($j=$count ; $j>$i; $j ){ if ($array[$j] < $array[$j ]){ $tmp = $array[$j]; $array[$j] = $array[$j ]; $array[$j ] = $tmp; } } } return $array; } //快速排序(一維數組) function quick_sort($array){ if (count($array) <= ) return $array; $key = $array[ ]; $left_arr = array(); $right_arr = array(); for ($i= ; $i<count($array); $i++){ if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr array($key) $right_arr); } lishixin/Article/program/PHP/201311/21194

Ⅹ 使用php語言實現代碼,內容為快速排序的核心演算法,假設擬需排序對象是某一維數組

<?php
classBubble{
privatefunction__construct(){
}
privatestaticfunctionsortt($data){
if(count($data)<=1){
return$data;
}
$tem=$data[0]['score'];
$leftarray=array();
$rightarray=array();
for($i=1;$i<count($data);$i++){
if($data[$i]['score']<=$tem){
$leftarray[]=$data[$i];
}else{
$rightarray[]=$data[$i];
}
}
$leftarray=self::sortt($leftarray);
$rightarray=self::sortt($rightarray);
$sortarray=array_merge($leftarray,array($data[0]),$rightarray);
return$sortarray;
}
publicstaticfunctionmain($data){
$ardata=self::sortt($data);
return$ardata;
}
}

$arr=array(
array('sid'=>1,'score'=>76),
array('sid'=>2,'score'=>93),
array('sid'=>3,'score'=>68.5),
array('sid'=>4,'score'=>82.5),
array('sid'=>5,'score'=>60.5)
);
print_r(Bubble::main($arr));

閱讀全文

與php快速排序代碼相關的資料

熱點內容
海康攝像螢石雲伺服器 瀏覽:814
安卓手機怎麼改安卓版名 瀏覽:147
雅思聽力807詞彙pdf 瀏覽:897
黃豆私人加密 瀏覽:192
java分鍾轉換小時 瀏覽:245
易語言伺服器如何提高 瀏覽:591
網站主機伺服器地址查看 瀏覽:859
演算法學不會能當程序員嗎 瀏覽:119
程序員技術交流研究 瀏覽:814
javaresponse文件 瀏覽:734
linuxrar壓縮文件夾 瀏覽:218
魅藍手機連接不上伺服器怎麼回事 瀏覽:379
工行app怎麼改已綁定銀行卡 瀏覽:533
oppo晶元程序員 瀏覽:602
oppok3應用怎麼加密 瀏覽:327
電腦軟盤怎麼加密碼 瀏覽:815
伺服器光交換機有什麼用 瀏覽:708
app上怎麼拍蛙小俠 瀏覽:217
志高聊天app怎麼下載 瀏覽:635
郵政app怎麼不能掃付款碼 瀏覽:559