ホームページ バックエンド開発 PHPチュートリアル PHP での 4 つのソート アルゴリズムの実装

PHP での 4 つのソート アルゴリズムの実装

Jun 23, 2016 pm 01:37 PM

前提: バブル ソート、クイック ソート、選択ソート、挿入ソートを使用して、以下の配列内の値を小さいものから大きいものへ並べ替えます。
配列変数 $arr(1,43,54,62,21,66,32,78,36,76,39);

1. バブルソート

アイデア分析: ソートされる列内グループ番号は、現在配置されていない数列について、前後にある2つの番号を比較し、大きい方が沈み、小さい方が上がるように調整します。つまり、2 つの隣接する数値を比較し、その順序が順序要件と逆であることが判明した場合は常に、それらの数値が交換されます。

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. 選択ソート

アイデア分析: ソートする一連の数値から最小の数値を選択し、それを最初の位置の数値と交換します。次に、残りの数値の中から最小のものを見つけて、それを 2 番目の数値と交換します。このループは、最後から 2 番目の数値が最後の数値と比較されるまで続きます。

function selectSort($arr) {     //双重循环完成,外层控制轮数,内层控制比较次数     $len=count($arr);     for($i=0; $i<$len-1; $i++) {         //先假设最小的值的位置 $p = $i;         for($j=$i+1; $j<$len; $j++) {             //$arr[$p] 是当前已知的最小值             if($arr[$p] > $arr[$j]) {             //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。             $p = $j;             }         }         //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。         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]) {             //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换                 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp;             } else {                 //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。                 break;             }         }     }    //返回最终结果    return $arr; }
ログイン後にコピー

4. クイックソート

アイデア分析: ベンチマーク要素 (通常は最初の要素または最後の要素) を選択します。 1 回のスキャンで、ソート対象の列が 2 つの部分に分割され、1 つの部分は参照要素より小さく、もう 1 つの部分は参照要素以上になります。このとき、ベース要素はソート後の正しい位置にあり、分割された 2 つの部分も同様に再帰的にソートされます。

りー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles