PHP 常見4種排序 氣泡排序、選擇排序、插入排序、快速排序
1、氣泡排序
原理:對一組資料,比較相鄰數的大小,將值大的放到後面。
<?php
// 氣泡排序
function bubbleOrder($arr)
{
$count = count($arr);
$temp = 0;
// 外層控制排序次數
for ($i = 0; $i < $count - 1; $i++) {
// 內層控制每輪比較次數
for ($j = 0; $j < $count - 1 - $i; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
} // print_r($arr); echo "<br>";
}
}
return $arr;
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = bubbleOrder($arr);
var_dump($res);
2、選擇排序
原理:在一組資料中,選出最小的數與第一個位置交換,
然後在剩下的資料中在找出最小的數和第二個位置交換
然後在剩下的資料中在找出最小的數和第三個位置交換
依次類推直到倒數第二個數和最後一個數對比
<?php
// 選擇排序
function selcetOrder($arr)
{
// 定義中間變數
$temp = 0;
$count = count($arr);
for ($i = 0; $i < $count - 1; $i++) {
//定義最小位置
$minIndex = $i;
for ($j = $i + 1; $j < $count; $j++) {
if ($arr[$j] < $arr[$minIndex]) {
$minIndex = $j;
}
}
if ($i != $minIndex) {
$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}
return $arr;
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = selcetOrder($arr);
var_dump($res);
3、插入排序
原理: 將需要排序的書,與前面已經排好的資料從後往前進行比較,使其插入到相應的位置;
<?php
// 插入排序
function insertOrder($arr)
{
$len = count($arr);
//控制總迴圈次數
for ($i = 0; $i < $len; $i++) {
$temp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
//從當前位置從後往前進行對比
if ($temp < $arr[$j]) {
$arr[$j + 1] = $arr[$j];
$arr[$j] = $temp;
}else{
break;
}
}
}
return $arr;
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = insertOrder($arr);
var_dump($res);
4、快速排序
原理:初始一箇中間值(一般選擇第一個),將需要排序的陣列分成3部分,小於中間的值放左邊、中間值、大於中間值的放右邊,繼續用遞迴用相同的方式來排序左邊和右邊,最後合併陣列
<?php
// 快速排序
function quickOrder($arr)
{
// 判斷是否需要執行,下面要拿出一箇中間值
if (count($arr)<=1) {
return $arr;
}
$middle = $arr[0]; // 中間值
$left = array();
$right = array();
for ($i = 1; $i < count($arr); $i++) {
if ($middle < $arr[$i]) {
$right[] = $arr[$i];
} else {
$left[] = $arr[$i];
}
}
// 遞迴排序劃分好的2邊陣列
$left = quickOrder($left);
$right = quickOrder($right);
return array_merge($left, array($middle), $right);
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = quickOrder($arr);
var_dump($res);
相關文章
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序
- 排序:氣泡排序&快速排序排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 氣泡排序 插入排序 快排排序
- 【JS面試向】選擇排序、桶排序、氣泡排序和快速排序簡介JS面試排序
- 氣泡排序和選擇排序流程圖排序流程圖
- 氣泡排序和選擇排序詳解排序
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 【小小前端】前端排序演算法第一期(氣泡排序、選擇排序、插入排序)前端排序演算法
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- go 實現氣泡排序和插入排序Go排序
- 排序——氣泡排序排序
- 桶排序 選擇,插入排序排序
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- 氣泡排序、歸併排序與快速排序比較排序
- 用JS實現氣泡排序和插入排序JS排序
- 氣泡排序與選擇排序超詳細講解排序
- Go實現氣泡排序和快速排序Go排序
- 【C語言】氣泡排序與快速排序C語言排序
- 選擇排序和快速排序排序
- 圖解選擇排序與插入排序圖解排序
- Java實現氣泡排序和插入排序演算法Java排序演算法
- 氣泡排序排序
- 排序演算法--氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法–氣泡排序排序演算法
- 【排序】氣泡排序(待補充)排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- Java常見排序演算法之插入排序Java排序演算法
- 選擇排序和插入排序(C++實現)排序C++
- js氣泡排序JS排序