ホームページ バックエンド開発 PHPの問題 PHPでソートするにはいくつかの方法があります

PHPでソートするにはいくつかの方法があります

Jul 22, 2020 am 09:18 AM
php 選別

php のソート方法には次のものが含まれます: 1. バブル ソート、つまり、隣接する 2 つの数値を比較し、ソート要件と逆の順序であることが判明した場合は常に交換されます; 2. 選択ソート; 3. 挿入ソート、つまり、n 番目の数値を前の順序の数値に挿入して、これらの n 数値も順序どおりになるようにする; 4. クイックソート。

PHPでソートするにはいくつかの方法があります

前提: バブル ソート、クイック ソート、選択ソート、および挿入ソートを使用して、次の配列内の値を小さいものから大きいものへ並べ替えます。

$arr(1,43,54,62,21,66,32,78,36,76,39);

推奨: 「PHP チュートリアル

1. バブルソート

アイデア分析: ソート対象の一連の数値のうち、まだソートされていないシーケンスについて、前から後ろに向かって順番に隣接する 2 つの数値に進みます。比較して、大きい数値が沈み、小さい数値が上昇するように調整します。つまり、2 つの隣接する数値が比較され、それらの順序が順序要件と逆であることが判明するたびに、それらは交換されます。

コード実装:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

$arr=array(1,43,54,62,21,66,32,78,36,76,39); 

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 番目の数値が最後の数値と比較されるまで続きます。

コード実装:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

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 数値も順序どおりにする必要があります。すべてが整うまでこのサイクルを繰り返します。

コード実装:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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 つの部分も同様に再帰的にソートされます。

コード実装:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

function quickSort($arr) {

    //先判断是否需要继续进行

    $length = count($arr);

    if($length <= 1) {

        return $arr;

    }

    //选择第一个元素作为基准

    $base_num = $arr[0];

    //遍历除了标尺外的所有元素,按照大小关系放入两个数组内

    //初始化两个数组

    $left_array = array();  //小于基准的

    $right_array = array();  //大于基准的

    for($i=1; $i<$length; $i++) {

        if($base_num > $arr[$i]) {

            //放入左边数组

            $left_array[] = $arr[$i];

        } else {

            //放入右边

            $right_array[] = $arr[$i];

        }

    }

    //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数

    $left_array = quick_sort($left_array);

    $right_array = quick_sort($right_array);

    //合并

    return array_merge($left_array, array($base_num), $right_array);

}

ログイン後にコピー

以上がPHPでソートするにはいくつかの方法がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

See all articles