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é)束后,再來一輪,直到所有相鄰數(shù)無逆序,即按順序排完】
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)下來flag==false;說明縱向循環(huán)里每次相鄰元素比較大小時(shí)if條件均不滿足,即從小到大已排好,無需再橫向循環(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é)束后,再來一輪,直到所有相鄰數(shù)無逆序,即按順序排完】
復(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)下來flag==false;說明縱向循環(huán)里每次相鄰元素比較大小時(shí)if條件均不滿足,即從小到大已排好,無需再橫向循環(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下對數(shù)組進(jìn)行排序的函數(shù)
- array_multisort實(shí)現(xiàn)PHP多維數(shù)組排序示例講解
- PHP排序之二維數(shù)組的按照字母排序?qū)崿F(xiàn)代碼
- PHP 多維數(shù)組的排序問題 根據(jù)二維數(shù)組中某個(gè)項(xiàng)排序
- php比較多維數(shù)組中值的大小排序?qū)崿F(xiàn)代碼
- PHP 冒泡排序 二分查找 順序查找 二維數(shù)組排序算法函數(shù)的詳解
- php二維數(shù)組排序詳解
- php對二維數(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代碼DOS造成用光網(wǎng)絡(luò)帶寬
一打開IIS,服務(wù)器的流出帶寬就用光-----就是說服務(wù)器不斷向別人發(fā)包,這個(gè)情況和受到DDOS攻擊是不同的,DDOS是不斷收到大量數(shù)據(jù)包.2011-03-03
WordPress開發(fā)中用于獲取近期文章的PHP函數(shù)使用解析
這篇文章主要介紹了WordPress開發(fā)中用于獲取近期文章的PHP函數(shù)使用解析,即對wp_get_recent_posts函數(shù)的使用方法介紹,需要的朋友可以參考下2016-01-01
PHP擴(kuò)展mcrypt實(shí)現(xiàn)的AES加密功能示例
這篇文章主要介紹了PHP擴(kuò)展mcrypt實(shí)現(xiàn)的AES加密功能,結(jié)合實(shí)例形式分析了php基于mcrypt實(shí)現(xiàn)AES加密的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
Ajax+PHP實(shí)現(xiàn)的模擬進(jìn)度條功能示例
這篇文章主要介紹了Ajax+PHP實(shí)現(xiàn)的模擬進(jìn)度條功能,結(jié)合實(shí)例形式分析了php結(jié)合ajax動(dòng)態(tài)讀取文件實(shí)現(xiàn)進(jìn)度條功能的相關(guān)操作技巧,需要的朋友可以參考下2019-02-02

