原題截圖
很典型的排序問題,那麼就通過這道題複習一下排序演算法。1、PHP內建排序函式解決此問題
if(empty($rotateArray)) return 0;
return min($rotateArray);
//sort($rotateArray);
//return $rotateArray[0];
複製程式碼
最直接且最簡單的實現方式。
當然我們本文不只為了解決這個問題,那麼我們來介紹一下其它的且比較典型的排序演算法。
1、氣泡排序
思路分析:在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
function bubbleSort($arr)
{
$len = count($arr);
for ($i = 1; $i < $len; $i++) {
for ($k = 0; $k < $len - $i; $k++) {
if ($arr[$k] > $arr[$k + 1]) {
$tmp = $arr[$k + 1];
$arr[$k + 1] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
return $arr;
}
複製程式碼
此排序方式不太試用於解決上題
2、選擇排序
思路分析:在要排序的一組數中,選出最小的一個數與第一個位置的數交換。然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後一個數比較為止。
function selectSort($arr)
{
$len = count($arr);
for ($i = 0; $i < $len - 1; $i++) {
$p = $i;
for ($j = $i + 1; $j < $len; $j++) {
if ($arr[$p] > $arr[$j])
$p = $j;
}
if ($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
return $arr;
}
複製程式碼
3、插入排序
思路分析:在要排序的一組數中,假設前面的數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。
function insertSort($arr)
{
$len = count($arr);
for ($i = 1; $i < $len; $i++) {
$tmp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
if ($tmp >= $arr[$j]) break;
$arr[$j + 1] = $arr[$j];
$arr[$j] = $tmp;
}
}
return $arr;
}
複製程式碼
4、快速排序
思路分析:選擇一個基準元素,通常選擇第一個元素或者最後一個元素。通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素。此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分。
function quickSort($arr)
{
$len = count($arr);
if ($len <= 1) return $arr;
$leftArr = $rightArr = [];
$item = $arr[0];
for ($i = 1; $i < $len; $i++) {
if ($item > $arr[$i])
$leftArr[] = $arr[$i];
else
$rightArr[] = $arr[$i];
}
return array_merge(quickSort($leftArr), [$item], quickSort($rightArr));
}
複製程式碼
以上4種排序方法是比較常見的,其它的排序演算法有時間繼續更新。