PHP排序演算法(插入,選擇,交換,冒泡,快速)
// 氣泡排序
function BubbleSort($arr) {
// 獲得陣列總長度
$num = count($arr);
// 正向遍歷陣列
for ($i = 1; $i < $num; $i++) {
// 反向遍歷
for ($j = $num - 1; $j >= $i ; $j--) {
// 相鄰兩個數比較
if ($arr[$j] < $arr[$j-1]) {
// 暫存較小的數
$iTemp = $arr[$j-1];
// 把較大的放前面
$arr[$j-1] = $arr[$j];
// 較小的放後面
$arr[$j] = $iTemp;
}
}
}
return $arr;
}
// 交換法排序
function ExchangeSort($arr){
$num = count($arr);
// 遍歷陣列
for ($i = 0;$i < $num - 1; $i++) {
// 獲得當前索引的下一個索引
for ($j = $i + 1; $j < $num; $j++) {
// 比較相鄰兩個的值大小
if ($arr[$j] < $arr[$i]) {
// 暫存較小的數
$iTemp = $arr[$i];
// 把較大的放前面
$arr[$i] = $arr[$j];
// 較小的放後面
$arr[$j] = $iTemp;
}
}
}
return $arr;
}
// 選擇法排序
function SelectSort($arr) {
// 獲得陣列總長度
$num = count($arr);
// 遍歷陣列
for ($i = 0;$i < $num-1; $i++) {
// 暫存當前值
$iTemp = $arr[$i];
// 暫存當前位置
$iPos = $i;
// 遍歷當前位置以後的資料
for ($j = $i + 1;$j < $num; $j++){
// 如果有小於當前值的
if ($arr[$j] < $iTemp) {
// 暫存最小值
$iTemp = $arr[$j];
// 暫存位置
$iPos = $j;
}
}
// 把當前值放到算好的位置
$arr[$iPos] = $arr[$i];
// 把當前值換成算好的值
$arr[$i] = $iTemp;
}
return $arr;
}
// 插入法排序
function InsertSort($arr){
$num = count($arr);
// 遍歷陣列
for ($i = 1;$i < $num; $i++) {
// 獲得當前值
$iTemp = $arr[$i];
// 獲得當前值的前一個位置
$iPos = $i - 1;
// 如果當前值小於前一個值切未到陣列開始位置
while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
// 把前一個的值往後放一位
$arr[$iPos + 1] = $arr[$iPos];
// 位置遞減
$iPos--;
}
$arr[$iPos+1] = $iTemp;
}
return $arr;
}
// 快速排序
function QuickSort($arr){
$num = count($arr);
$l = $r = 0;
$left = $right = array();
// 從索引的第二個開始遍歷陣列
for ($i = 1;$i < $num; $i++) {
// 如果值小於索引1
if ($arr[$i] < $arr[0]) {
// 裝入左索引陣列(小於索引1的資料)
$left[] = $arr[$i];
$l++;
} else {
// 否則裝入右索引中(大於索引1的資料)
$right[] = $arr[$i];
$r++; //
}
}
// 如果左索引有值 則對左索引排序
if($l > 1) {
$left = QuickSort($left);
}
// 排序後的陣列
$new_arr = $left;
// 將當前陣列第一個放到最後
$new_arr[] = $arr[0];
// 如果又索引有值 則對右索引排序
if ($r > 1) {
$right = QuickSort($right);
}
// 根據右索引的長度再次增加資料
for($i = 0;$i < $r; $i++) {
$new_arr[] = $right[$i];
}
return $new_arr;
}
?>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/603218/viewspace-1054663/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 排序演算法Python(冒泡、選擇、快速、插入、希爾、歸併排序)排序演算法Python
- 排序演算法之冒泡,選擇,插入和希爾排序演算法
- 排序法:選擇、冒泡、插入和快排排序
- Python演算法之---冒泡,選擇,插入排序演算法Python演算法排序
- 單連結串列的排序(插入,選擇,冒泡)排序
- 最簡單易懂的三種排序演算法:冒泡、選擇、插入排序演算法
- 基礎排序(冒泡、選擇、插入)學習筆記排序筆記
- PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序PHP排序
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 十種排序演算法總結(冒泡、插入、選擇、希爾、歸併、堆、快速,計數,桶,基數)排序演算法
- (建議收藏)2020最新排序演算法總結:冒泡、選擇、插入、希爾、快速、歸併、堆排序、基數排序排序演算法
- 反射,hashlib模組,正則匹配,冒泡,選擇,插入排序反射排序
- OC實現選擇、插入和快速排序排序
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 圖形化排序演算法比較:快速排序、插入排序、選擇排序、氣泡排序排序演算法
- PHP 排序演算法之選擇排序PHP排序演算法
- 冒泡,選擇排序法(C#)排序C#
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 選擇排序和插入排序排序
- 桶排序 選擇,插入排序排序
- 陣列基本操作及冒泡演算法、直接選擇排序陣列演算法排序
- 選擇法和冒泡法排序介面排序
- 選擇排序和快速排序排序
- 常見的三種排序演算法(選擇,冒泡,計數)排序演算法
- 資料結構和演算法:03.冒泡、選擇排序資料結構演算法排序
- C語言排序 冒泡 選擇 快排C語言排序
- (一)氣泡排序、選擇排序、插入排序排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 圖解選擇排序與插入排序圖解排序
- 冒泡和快速排序排序
- PHP 排序演算法之插入排序PHP排序演算法
- 排序演算法:插入折半排序 PHP 版排序演算法PHP
- 關於js陣列的六種演算法---水桶排序,氣泡排序,選擇排序,快速排序,插入排序,希爾排序的理解。JS陣列演算法排序
- 排序演算法集:冒泡、插入、希爾、快速(陣列實現、連結串列實現)排序演算法陣列
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 排序演算法__選擇排序排序演算法
- 排序演算法:選擇排序排序演算法
- PHP基礎演算法之選擇排序法PHP演算法排序