php中的一些數(shù)組排序方法分享
更新時(shí)間:2012年07月20日 14:44:47 作者:
php中的一些數(shù)組排序方法分享,需要的朋友可以參考下
A.內(nèi)部排序(直接加載到內(nèi)存進(jìn)行排序):包括交換式排序(冒泡和快速法)、選擇式排序、插入式排序
B.外部排序(因數(shù)據(jù)量大,需借助外部存儲(chǔ)進(jìn)行排序):包括合并排序、直接合并排序
【冒泡排序:從后向前,依次比較相鄰元素的排序碼,若發(fā)現(xiàn)逆序則交換,一輪結(jié)束后,再來(lái)一輪,直到所有相鄰數(shù)無(wú)逆序,即按順序排完】
function maoPao($arr,$style)//【默認(rèn)傳遞的是值,不是地址。如果在$arr前加個(gè)&,則和$arr1指向同一個(gè)地址,函數(shù)外的$arr1也被排好了】
{
$temp=0;
$flag=false;
for($i=0;$i<count($arr)-1;$i++)
{
for($j=0;$j<count($arr)-1-$i;$j++)
{
if($style=='bts') $op=$arr[$j]<$arr[$j+1];
else if($style=='stb') $op=$arr[$j]>$arr[$j+1];
if($op)
{
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
$flag=true;
}
}
if($flag==false)
{
break;//當(dāng)一次橫向循環(huán)下來(lái)flag==false;說(shuō)明縱向循環(huán)里每次相鄰元素比較大小時(shí)if條件均不滿足,即從小到大已排好,無(wú)需再橫向循環(huán)
}
}
foreach ($arr as $key => $value)
{
echo $value.',';
}
}
$arr1=array(101,101,-9,-8,0,76,1,57,43,90,23,-56);
maoPao($arr1,'stb');//small to big
【選擇排序:第二個(gè)數(shù)至第n個(gè)數(shù)分別與第一個(gè)數(shù)比較,進(jìn)行交換,第三個(gè)數(shù)至第n個(gè)數(shù)分別與第二個(gè)數(shù)比較,進(jìn)行交換,直到排完】
function selectSort($arr,$style)
{
$temp=0;
$flag=false;
for($i=0;$i<count($arr)-1;$i++)
{
for($j=$i+1;$j<count($arr);$j++)
{
if($style=='bts') $op=$arr[$i]<$arr[$j];
else if($style=='stb') $op=$arr[$i]>$arr[$j];
if($op)
{
$temp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$temp;
$flag=true;
}
}
if($flag==false)
{
break;
}
}
foreach ($arr as $key => $value)
{
echo $value.',';
}
}
$arr1=array(21.5,33,90,7,-4,5,55,11);
selectSort($arr1,'stb');
function selectSort($arr,$style)
{
$temp=0;
$flag=false;
for($i=0;$i<count($arr)-1;$i++)
{
for($j=$i+1;$j<count($arr);$j++)
{
if($style=='bts') $op=$arr[$i]<$arr[$j];
else if($style=='stb') $op=$arr[$i]>$arr[$j];
if($op)
{
$temp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$temp;
$flag=true;
}
}
if($flag==false)
{
break;
}
}
foreach ($arr as $key => $value)
{
echo $value.',';
}
}
$arr1=array(21.5,33,90,7,-4,5,55,11);
selectSort($arr1,'stb');
echo "<br/>";
B.外部排序(因數(shù)據(jù)量大,需借助外部存儲(chǔ)進(jìn)行排序):包括合并排序、直接合并排序
【冒泡排序:從后向前,依次比較相鄰元素的排序碼,若發(fā)現(xiàn)逆序則交換,一輪結(jié)束后,再來(lái)一輪,直到所有相鄰數(shù)無(wú)逆序,即按順序排完】
復(fù)制代碼 代碼如下:
function maoPao($arr,$style)//【默認(rèn)傳遞的是值,不是地址。如果在$arr前加個(gè)&,則和$arr1指向同一個(gè)地址,函數(shù)外的$arr1也被排好了】
{
$temp=0;
$flag=false;
for($i=0;$i<count($arr)-1;$i++)
{
for($j=0;$j<count($arr)-1-$i;$j++)
{
if($style=='bts') $op=$arr[$j]<$arr[$j+1];
else if($style=='stb') $op=$arr[$j]>$arr[$j+1];
if($op)
{
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
$flag=true;
}
}
if($flag==false)
{
break;//當(dāng)一次橫向循環(huán)下來(lái)flag==false;說(shuō)明縱向循環(huán)里每次相鄰元素比較大小時(shí)if條件均不滿足,即從小到大已排好,無(wú)需再橫向循環(huán)
}
}
foreach ($arr as $key => $value)
{
echo $value.',';
}
}
$arr1=array(101,101,-9,-8,0,76,1,57,43,90,23,-56);
maoPao($arr1,'stb');//small to big
【選擇排序:第二個(gè)數(shù)至第n個(gè)數(shù)分別與第一個(gè)數(shù)比較,進(jìn)行交換,第三個(gè)數(shù)至第n個(gè)數(shù)分別與第二個(gè)數(shù)比較,進(jìn)行交換,直到排完】
復(fù)制代碼 代碼如下:
function selectSort($arr,$style)
{
$temp=0;
$flag=false;
for($i=0;$i<count($arr)-1;$i++)
{
for($j=$i+1;$j<count($arr);$j++)
{
if($style=='bts') $op=$arr[$i]<$arr[$j];
else if($style=='stb') $op=$arr[$i]>$arr[$j];
if($op)
{
$temp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$temp;
$flag=true;
}
}
if($flag==false)
{
break;
}
}
foreach ($arr as $key => $value)
{
echo $value.',';
}
}
$arr1=array(21.5,33,90,7,-4,5,55,11);
selectSort($arr1,'stb');
復(fù)制代碼 代碼如下:
function selectSort($arr,$style)
{
$temp=0;
$flag=false;
for($i=0;$i<count($arr)-1;$i++)
{
for($j=$i+1;$j<count($arr);$j++)
{
if($style=='bts') $op=$arr[$i]<$arr[$j];
else if($style=='stb') $op=$arr[$i]>$arr[$j];
if($op)
{
$temp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$temp;
$flag=true;
}
}
if($flag==false)
{
break;
}
}
foreach ($arr as $key => $value)
{
echo $value.',';
}
}
$arr1=array(21.5,33,90,7,-4,5,55,11);
selectSort($arr1,'stb');
echo "<br/>";
您可能感興趣的文章:
- PHP去除數(shù)組中重復(fù)的元素并按鍵名排序函數(shù)
- php array_map array_multisort 高效處理多維數(shù)組排序
- PHP 數(shù)組排序方法總結(jié) 推薦收藏
- PHP 多維數(shù)組排序(usort,uasort)
- PHP下對(duì)數(shù)組進(jìn)行排序的函數(shù)
- array_multisort實(shí)現(xiàn)PHP多維數(shù)組排序示例講解
- PHP排序之二維數(shù)組的按照字母排序?qū)崿F(xiàn)代碼
- PHP 多維數(shù)組的排序問(wèn)題 根據(jù)二維數(shù)組中某個(gè)項(xiàng)排序
- php比較多維數(shù)組中值的大小排序?qū)崿F(xiàn)代碼
- PHP 冒泡排序 二分查找 順序查找 二維數(shù)組排序算法函數(shù)的詳解
- php二維數(shù)組排序詳解
- php對(duì)二維數(shù)組按指定鍵值key排序示例代碼
- php冒泡排序、快速排序、快速查找、二維數(shù)組去重實(shí)例分享
- php數(shù)組中包含中文的排序方法
- PHP 二維數(shù)組根據(jù)某個(gè)字段排序的具體實(shí)現(xiàn)
- php數(shù)組隨機(jī)排序?qū)崿F(xiàn)方法
- 基于php實(shí)現(xiàn)隨機(jī)合并數(shù)組并排序(原排序)
相關(guān)文章
PHP構(gòu)造函數(shù)與析構(gòu)函數(shù)用法示例
這篇文章主要介紹了PHP構(gòu)造函數(shù)與析構(gòu)函數(shù)用法,簡(jiǎn)單講述php中構(gòu)造函數(shù)與析構(gòu)函數(shù)的定義與使用方法,并結(jié)合實(shí)例形式演示了構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序,需要的朋友可以參考下2016-09-09詳解Swoole跟傳統(tǒng)的web開(kāi)發(fā)的區(qū)別
Swoole高效跟傳統(tǒng)的web開(kāi)發(fā)有什么區(qū)別,除了傳統(tǒng)的LAMP/LNMP同步開(kāi)發(fā)模式,swoole的異步開(kāi)發(fā)模式是怎么樣的。本文帶著大家來(lái)詳細(xì)介紹一下。2021-05-05php用數(shù)組返回?zé)o限分類的列表數(shù)據(jù)的代碼
php自定義函數(shù)之用數(shù)組返回?zé)o限分類的列表數(shù)據(jù),這樣的實(shí)現(xiàn)可以提高執(zhí)行的效率不要每次都從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)。2010-08-08PHP將MySQL的查詢結(jié)果轉(zhuǎn)換為數(shù)組并用where拼接的示例
這篇文章主要介紹了PHP將MySQL的查詢結(jié)果轉(zhuǎn)換為數(shù)組并用where拼接的示例,這樣處理where條件時(shí)便可以在一定程度上優(yōu)化查詢和轉(zhuǎn)化的性能,需要的朋友可以參考下2016-05-05php中\(zhòng)r \r\n \t的區(qū)別示例介紹
這篇文章主要介紹了php中\(zhòng)r \r\n \t的區(qū)別,需要的朋友可以參考下2014-02-02