PHP で実装される一般的な並べ替えアルゴリズムの概要、PHP 並べ替えアルゴリズム_PHP チュートリアル
phpで実装される一般的な並べ替えアルゴリズム、php並べ替えアルゴリズムの概要
この記事は、一般的な PHP ソート アルゴリズムをまとめたもので、アルゴリズムを設計する際に参考になります。今度はそれをみんなで共有して参考にしてください。詳細は以下の通りです
1. 挿入ソート
単語を使って簡単に説明します。たとえば、 $arr = array(4,2,4,6,3,6,1,7,9); のように、数値のグループを順番に並べ替えます。
したがって、まず、配列の 2 番目の要素を最初の要素と比較します。最初の要素が 2 番目の要素より大きい場合は、次に、配列の 3 番目の要素を取得して、最初の要素と比較します。 2 番目の要素が比較され、3 番目の要素が小さい場合は交換されます。等々。これは挿入ソートであり、その時間頻度は 1+2+...+(n-1)=(n^2)/2 です。したがって、その時間計算量は O(n^2) になります。
リーリー
2. 選択の並べ替え
選択の並べ替えが言語で記述されている場合は、次のようになります: $arr = array(4,3,5,2,1);まず、最初の配列とそれ以降のすべての配列を比較し、最小の数値を見つけて、それを最初の配列と交換します (もちろん、最初の配列が最小である場合は、交換する必要はありません) 、次にループします。つまり、2 番目の数値を次の数値と比較し、最小の数値を見つけて、それを 2 番目の数値と交換する、というように繰り返します。つまり、毎回最小の残りの値を見つけます。 取得できます:初回、時間頻度は n です(最初のものと次の n-1 を比較し、最小のものを見つけ、それが最初のものであるかどうかを確認し、そうでない場合は交換します)未来、その後にマイナス 1 が続きます。 時間計算量も O(n^2);
phpの実装コードは次のとおりです:
リーリー
3. バブルソート
実際には、バブル ソートと選択ソートの間に大きな違いはありません。一番小さいものを見つけて左端に置きます。問題を順番に解決してください。違いは、バブル ソートでは位置がより多く交換されるのに対し、選択ソートでは最小の要素の添字が検索され、最も左の要素と位置が直接交換されることです。
PHP の実装コードは次のとおりです:
4. クイックソート
クイックソートは、言語で説明すると、配列から値 $a を選択し、それが $a より大きい場合は配列の右側に配置され、その逆も同様です。それは配列の左側に配置されます。次に、left と right をそれぞれ再帰的に呼び出します。つまり、left と right を細分化し、最後に配列をマージします。php はクイックソートを実装します:
5. 並べ替え
実際、マージソートは分割とマージのアイデアです。これは、クイックソートのアイデアと共通しており、左側に 1 つの山、右側に 1 つの山を配置してからマージします。並べ替えは再帰によって行われます。 違いは何ですか?それらの違いは、考え方の本質的な違いでもあります。クイックソートの分割では、サイズ比較のために特定の値が選択されるため、それらが左右に分割されます。つまり、小さい山は左側に配置され、大きい山は右側に配置されます。次に、小さな左が left1 と right1 に細分化されます。 。 。 。並べ替えは、同様の再帰を実行することによって行われます。つまり、細分化し続けた場合、再帰終了時の left1 が最小値になります。マージソートとは、配列を幾何学的に左右から最小粒度2または1に再帰的に分割し、サイズの比較を開始してからマージすることです。ここでの比較サイズは次のとおりです。息子の左側の要素が息子の右側の要素と比較され、ソートされて父親の左側または右側にマージされます。ここで、最後の 2 つの配列がそれぞれソートおよびマージされるまで、最初の左と右はそれぞれの順序のみを確認でき、配列全体の順序は、最後の比較を通じてまだ確認できません。本当の意味での左と右の仕分け。
リーリー
6. ヒープソート
この例では、fixDown 関数は特定のノードの下方調整を実装します。ここでのデフォルトは開始ノードが 1 であり、親ノードと子ノード間の関係を計算するのに便利です。注:
開始ノードを1とした親子関係:親ノードk、子ノードは2K、2k+1子ノードj、親ノードはfloor(j/2)floorは切り捨て
開始ノードを0とした親子関係:親ノードk、子ノードは2K+1、2k+2 子ノードj、親ノードはfloor((j-1)/2)
パラメータ$kは調整ポイントの位置、$lenthは配列の長さであり、1から最後のノードまでの座標です。
リーリー
挿入ソート、バブルソート、選択ソート、シェルソート、クイックソート、マージソート、ヒープソート、SortUtilなどを含む、Java言語で実装されたさまざまなソート。
挿入ソート: package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;/*** @author Treeroot
* @since 2006-2-2
* @version 1.0*/ public class InsertSort は SortUtil.Sort{
/* (非 Javadoc)
* @org.rut.util.algorithm.SortUtil.Sort#sort(int[])*/public void sort(int[] data) を参照してください。 int temp;for(int i=1;i
import org.rut.util.algorithm.SortUtil;/*** @著者 Treeroot
* @since 2006-2-2
* @version 1.0*/public class BubbleSort は SortUtil.Sort{
/* (非 Javadoc)
* を実装します @see org.rut.util.algorithm.SortUtil.Sort # sort(int[])*/public void sort(int[] data) {int temp;for(int i=0;i
ソートアルゴリズム いわゆるソートは、レコードの文字列を、その中の 1 つまたはいくつかのキーワードのサイズに応じて昇順または降順に並べる操作です。
分類
コンピューター サイエンスで使用される並べ替えアルゴリズムは通常、次のように分類されます。
リスト (n) のサイズに応じて、計算複雑さ (最低、平均、最高のパフォーマンス)。一般的に、良いパフォーマンスは O です。 (n log n)、悪い動作は Ω(n2) です。ソートの理想的なパフォーマンスは O(n) です。抽象キー比較を 1 つだけ使用する並べ替えアルゴリズムでは、常に平均で少なくとも Ω(n log n) が必要です。
メモリ使用量 (および他のコンピューター リソースの使用量)
安定性: 安定した並べ替えアルゴリズムにより、等しいキー (つまり値) に従ってレコードの相対的な順序が維持されます。つまり、ソート アルゴリズムは安定しています。つまり、キーが等しい 2 つのレコード R と S があり、元のシーケンスで R が S の前に出現する場合、ソートされたシーケンスでも R が S の前になります。
一般的なメソッド: 挿入、交換、選択、マージなど。交換ソートにはバブル ソートとクイックソートが含まれます。選択ソートには、シェーカー ソートとヒープ ソートが含まれます。
整数など、等しい要素が区別できない場合、安定性は問題になりません。ただし、次の数値のペアが最初の桁でソートされると仮定します。
(4, 1) (3, 1) (3, 7) (5, 6)
この場合、2 つの異なる結果を生成することが可能です。1 つは、等しいキー値に従って相対順序を維持することです。もう 1 つは、等しいキー値に従って相対順序を維持することです。1 つはそうではありません:
(3, 1) (3, 7) (4, 1) (5, 6) (順序を維持)
(3, 7) (3) , 1) (4, 1) (5, 6) (順序変更)
不安定な並べ替えアルゴリズムでは、等しいキー値内のレコードの相対的な順序が変更される可能性がありますが、安定した並べ替えアルゴリズムではこれが行われません。不安定な並べ替えアルゴリズムは特に安定していると見なすことができます。これを行う 1 つの方法は、キー比較を人為的に拡張して、他の点では同一のキーを持つ 2 つのオブジェクト間の比較が決定され、元のデータ順序のエントリをタイブレーカーとして使用することです。ただし、この順序には通常、追加のスペース オーバーヘッドが含まれることに注意してください。
並べ替えアルゴリズムのリスト
この表では、n は並べ替えられるレコードの数、k は異なるキー値の数です。
安定
バブルソート (バブルソート) — O(n2)
カクテルソート (双方向バブルソート) — O(n2)
挿入ソート (挿入ソート) — O(n2)
バケットソート (バケットソート) — O(n ); O(k) の追加メモリが必要
ソートのカウント — O(n+k); 追加のメモリが必要です
マージ ソート — O(n) の追加メモリが必要です
配置マージ ソート — O(n2)
バイナリ ツリー ソート (バイナリ ツリー ソート) — O(n) の追加メモリが必要
ピジョンホール ソート — O(n+k) の追加メモリが必要
基数ソート — O(n·k); には O(n) の追加メモリが必要です
Gnome ソート — O(n2)
ライブラリのソート — O(n log n) には、高い確率で (1+ε)n の追加メモリが必要です
不安定
選択ソート — O(n2)
シェルソート ) — O(n log n) 現在の最良のバージョンを使用する場合
コムソート — O(n log n)
ヒープソート (heapsort) — O(n log n)
...本文>>

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

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

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
