よく使用される 4 つの並べ替えアルゴリズム

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); 
}

おすすめ

転載: blog.csdn.net/weixin_64940494/article/details/126976768