排序算法之PHP版快速排序、冒泡排序
一、快速排序
1.簡(jiǎn)介
快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個(gè)項(xiàng)目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況并不常見。事實(shí)上,快速排序通常明顯比其他Ο(n log n) 算法更快,因?yàn)樗膬?nèi)部循環(huán)(inner loop)可以在大部分的架構(gòu)上很有效率地被實(shí)現(xiàn)出來。
快速排序使用分治法(Divide and conquer)策略來把一個(gè)串行(list)分為兩個(gè)子串行(sub-lists)。
2.步驟
從數(shù)列中挑出一個(gè)元素,稱為 “基準(zhǔn)”(pivot),
重新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊)。在這個(gè)分區(qū)退出之后,該基準(zhǔn)就處于數(shù)列的中間位置。這個(gè)稱為分區(qū)(partition)操作。
遞歸地(recursive)把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序。
3.代碼實(shí)現(xiàn)
{
$len = count($array);
if($len <= 1)
{
return $array;
}
$key = $array[0];
$left = array();
$right = array();
for($i=1; $i<$len; ++$i)
{
if($array[$i] < $key)
{
$left[] = $array[$i];
}
else
{
$right[] = $array[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left, array($key), $right);
}
print '<pre>';
print_r(quickSort(array(1,4,22,5,7,6,9)));
print '</pre>';
4.排序效果
使用快速排序法對(duì)一列數(shù)字進(jìn)行排序的過程
二、冒泡排序
1.簡(jiǎn)介
冒泡排序(Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
2.步驟
比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
3.代碼實(shí)現(xiàn)
function bubbingSort(array $array)
{
for($i=0, $len=count($array)-1; $i<$len; ++$i)
{
for($j=$len; $j>$i; --$j)
{
if($array[$j] < $array[$j-1])
{
$temp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $temp;
}
}
}
return $array;
}
print '<pre>';
print_r(bubbingSort(array(1,4,22,5,7,6,9)));
print '</pre>';
4.排序過程
使用冒泡排序?yàn)橐涣袛?shù)字進(jìn)行排序的過程
- PHP經(jīng)典算法集錦【經(jīng)典收藏】
- php經(jīng)典算法集錦
- PHP 冒泡排序 二分查找 順序查找 二維數(shù)組排序算法函數(shù)的詳解
- php實(shí)現(xiàn)的常見排序算法匯總
- PHP四種基本排序算法示例
- 使用PHP實(shí)現(xiàn)二分查找算法代碼分享
- PHP實(shí)現(xiàn)字符串翻轉(zhuǎn)功能的方法【遞歸與循環(huán)算法】
- PHP 加密解密內(nèi)部算法
- PHP面試常用算法(推薦)
- PHP常用算法和數(shù)據(jù)結(jié)構(gòu)示例(必看篇)
- PHP各種常見經(jīng)典算法總結(jié)【排序、查找、翻轉(zhuǎn)等】
相關(guān)文章
PHP 傳輸會(huì)話curl函數(shù)的實(shí)例詳解
這篇文章主要介紹了PHP 傳輸會(huì)話curl函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09讓codeigniter與swfupload整合的最佳解決方案
網(wǎng)上有很多關(guān)于ci與swfupload的帖子,不過,并不是很完整,所以,這里綜合各家優(yōu)點(diǎn),經(jīng)過自己實(shí)際經(jīng)驗(yàn),做了下整理,需要的朋友可以參考下2014-06-06PHP中如何使用session實(shí)現(xiàn)保存用戶登錄信息
這篇文章主要給大家介紹在php中是如何使用session實(shí)現(xiàn)保存用戶登錄信息的,涉及到php session 用戶登錄等一些知識(shí)點(diǎn),使用session保存用戶登錄信息要比cookie安全很多。感興趣的朋友一起學(xué)習(xí)吧2015-10-10