1. バブルソート:
ペアごとの比較の場合、最後の要素はすでに最大または最小であるため、サイクルごとに最後の要素を比較する必要はありません。
第1サイクルの数はn、第2サイクルの最大数はn-1であり、各ラウンドで最大値または最小値が選択され、時間計算量はO(n^2)である。
function maopaoSort ($list) { $len = count($list); for ($i = 0; $i < $len - 1; $i++) { for ($j = 0; $j < $len - $i - 1; $j++) { if ($list[$j] > $list[$j + 1]) { $tmp = $list[$j]; $list[$j] = $list[$j + 1]; $list[$j + 1] = $tmp; $listを 返し ます 。 }
2. 並べ替えを選択します。
最小値として 1 つを選択し、残りをこの値と比較して、位置を交換します。
最初のサイクルの数は n、2 番目のサイクルの最大数は n-1、時間計算量は O(n^2) です。
function xuanzeSort ($list) { $len = count($list); for ($i = 0; $i < $len - 1; $i++) { $pos = $i; for ($j = $i + 1; $j < $len; $j++) { if ($list[$pos] > $list[$j]) { $pos = $j; if ($pos != $ i) { $tmp = $list[$pos] ; $list[$pos] = $list[$i]; $list[$i] = $tmp; $list を返し ます 。 }
3. 挿入ソート:
前の数値がすべて順序どおりであると仮定すると、n 番目の数値が順序付けされた配列に挿入される必要があります。
最初のサイクルの数は n、2 番目のサイクルの最大数は n-1、時間計算量は O(n^2) です。
function charuSort ($list){ $len = count($list); for ($i = 1; $i < $len; $i++) { $tmp = $list[$i];//获取对比元素 for ($j = $i - 1; $j > 0; $j- -) { if ($list[$j] > $tmp) { $list[$j + 1] = $list[$j]; $list[$j] = $tmp; } else { ブレーク; $listを 返し ます 。 }
4. クイックソート:
ベンチマーク値を設定し、ベンチマーク値より小さい場合は左側に配置し、ベンチマーク値より大きい場合は右側に配置し、最後に再帰的に左側と右側を並べ続け、最後に結合します。ソート後の配列。時間計算量は O(nlogn) です
public function kuaisuSort($list) { $len = count($list); // 中間の値を設定し、この値より小さい値を左に、この値より大きい値を右に配置し、最後にマージ $middle = $list[0 ]; $leftArr = $rightArr = []; for ($i = 1; $i < $len; $i++) { if ($list[$i] < $middle) { $ leftArr[] = $list[$ i]; } else { $rightArr[] = $list[$i]; } } // 左右の配列のソートを続行 if ($leftArr) { $leftArr =kuaisuSort($ leftArr); } // 右側の配列のソートを続けます if ($rightArr) { $rightArr = kuaisuSort($rightArr); } return array_merge($leftArr, [$middle], $rightArr); }