アルゴリズムはプログラミングに不可欠な部分であり、多くの場合データ構造と密接に関連しています。これらは合わせて、データ構造とアルゴリズム (DSA) として知られるものを構成し、コードをより効率的にするための鍵となります。プログラミングでは、アルゴリズムは一般に、特定の問題を解決するときに従うことを選択したパターンを指しますが、データ構造はデータを構造化するために選択した方法です。
一般的なアルゴリズムのタイプの 1 つは並べ替えアルゴリズムです。それぞれのデータ構造を使用して要素の新しい順序を決定する比較演算子を使用した並べ替えアルゴリズムを使用して、配列または要素のセットを並べ替えることができます。
この記事では、バブル ソート、マージ ソート、基数ソート、ヒープ ソートなど、Kotlin で人気のあるソート アルゴリズムのいくつかについて説明します。次に、バブル ソート アルゴリズムについて詳しく説明し、その利点のいくつかを考慮します。
このチュートリアルに従うには、コンピューター画面がちらつく必要があります。11 のソリューションを共有するには、 Kotlin の基本的な知識があり、Android Studio または IntelliJ IDE をインストールする必要があります。はじめましょう!
ソートアルゴリズムの概要
インプレース並べ替えアルゴリズムは、出力を生成するために定数スペースを使用して、リスト内の要素の配置を変更することによってリストを並べ替えます。この良い例には、リストを並べ替えるのに追加のスペースを必要としない挿入および選択並べ替えが含まれます。
並べ替えアルゴリズムはさまざまな方法で分類できます。たとえば、安定したコンピューターで NSIS エラーが表示される原因は何でしょうか。NSIS エラーを修正する 8 つの方法は、使用されるデータのシナリオに応じて、不安定であるか、内部的または外部的です。
内部ソートアルゴリズムと外部ソートアルゴリズム
内部ソートは、すべてのデータが内部メモリまたはメイン メモリに配置されるときに行われます。例としては、ヒープ、バブル、選択、クイック、挿入ソートなどがあります。内部ソートでは、収容できる入力の数はメモリのサイズに関係することに注意してください。
並べ替える必要があるすべてのデータを一度に実行できない場合、League of Legends LOLを完全に削除するにはどうすればよいですか? これら 5 つのヒントでは、クリーン アンロードがメモリに配置されると外部ソートが発生し、大量のデータに最適であることがわかります。外部の並べ替えには、ハード ドライブ、フラッシュ ドライブ、CD などの外部記憶装置を使用できます。例としては、マージとそのすべてのバリアント、マークアップ、外部基数ソートなどがあります。
安定した並べ替えアルゴリズムと不安定な並べ替えアルゴリズム
データが並べ替えられた後でも、同じ 2 つのデータ ポイントが同じ順序で表示される場合、安定した並べ替えが行われます。例としては、マージ、挿入、バブル ソートなどがあります。ノートパソコンのタッチパッドが故障した場合はどうすればよいですか? ソリューション グラフィック チュートリアルの概要安定した並べ替えは、安定した並べ替えの逆です。これは、データの並べ替え後に同じ 2 つのデータ ポイントが異なる順序で表示され、その結果、位置がずれた場合に発生します。例としては、ヒープやクイックソートなどがあります。
バブルソート
バブル ソートは最も単純な並べ替えアルゴリズムの 1 つであり、隣接する値を比較するために使用されます。この順序を実現するために、必要に応じてこれらの隣接する値を交換します。この並べ替えでは、より大きな値を上に置く、つまりバブリングする必要があります。ただし、時間の複雑さが高いため、大規模なデータセットには適していません。
マージソート
マージ ソート アルゴリズムは分割統治パラダイムに従います。2 つの配列を均等に半分に分割し、それらを一緒に並べ替える必要があります。この組み合わせによりマージが行われ、さらに別の配列と結合されます。配列が空であるか、要素が 1 つだけ残っており、他の要素を組み合わせることができない場合にのみ、Windows 10 システムで Edge ブラウザが自動的にクラッシュする問題を解決するにはどうすればよいですか? Edge ブラウザが起動時にクラッシュした場合はどうすればよいですか? この操作は終了しません。通常、マージ操作では 2 つの小さな配列を使用して、より大きな配列を形成します。
基数ソート
基数ソート アルゴリズムでは、最下位桁から最上位桁へのビット単位のソートが使用されます。これは、カーディナリティに基づいて要素を作成し、それらをバケットに分散することでこれを行う非比較アルゴリズムです。したがって、バケットまたは数値ソートとも呼ばれます。
ヒープソート
ヒープソートは、バイナリ ヒープ データ構造に基づく比較ベースの並べ替え手法です。これはインプレース アルゴリズムであると同時に不安定ですが、安定させることができます。再帰や最小限のメモリ使用量などの高度なコンピューター サイエンスの概念がないため、理解するのは簡単です。主に .IntroSort のようなハイブリッド アルゴリズムで使用されます。
クイックソート
クイックソート アルゴリズムは、両方とも分割統治の概念を含むという点でマージ ソートに似ています。ただし、クイックソート アルゴリズムはインプレース アルゴリズムでもあります。これは、配列からピボット要素を選択し、ピボットより大きいか小さいかに基づいて他の要素を 2 つのサブ配列に分割することによって動作します。パーティション交換ソートとも呼ばれます。
バブルソートアルゴリズム: Android開発における利点
バブル ソート アルゴリズムは記述が簡単で理解しやすく、必要なコードは数行だけです。この実装の単純さは、Android 開発者がアプリケーション設計におけるエラー率を削減し、アプリケーションの効率を向上させるのに役立ちます。配列内の小さなエラーを検出でき、線形複雑性を使用して修正できます。2n
バブルソートアルゴリズムの実装
バブル ソート アルゴリズムの実装には、次のコード スニペットに示すように、基本的に 2 つの値を比較し、必要に応じてそれらを交換することが含まれます。
class BubbleSortingAlgorithm { static void bubbleSorting(int arrayNumber[]) { int n = arrayNumber.length; int temp=0; for (int i = 0; i < n; i++){ for (int j = 1; j < (n - i); j++){ if (arrayNumber[j-1] > arrayNumber[j]) { // 要素は 、temp = arrayNumber[j-1];の交換メソッドを使用して交換されます。 配列番号[j-1] = 配列番号[j]; arrayNumber[j] = temp; } } } } // これは、bubbleSorting 実装ロジックをテスト実行するためのメイン メソッドです public static void main(String args[]) { int arrayVariable[] = {10, 50, 110, 90, 1, 9, 200, 4, 2000} ; System.out.println("これは並べ替え前の配列値です") for(int i=0; i < arrayVariable.length; i++){ System.out.print(arrayVariable[i] + " ") } System.out .print(); // バブルソートアルゴリズムを使用して要素をソートします bubbleSorting(arrayVariable); System.out.println("これはソート後の配列の値です"); for(int i=0; i < arrayVariable.length; i++){ システムアウト。 } }
上記のコードの出力は次のようになります。
これはソート前の配列の値です 10、50、110、90、1、9、200、4、2000 これはソート後の配列の値です 1、4、9、10、50、90、110、200、2000
バブルソートアルゴリズム: 課題
バブル ソート アルゴリズムを使用する際の主な課題は、時間の複雑さです。大規模なデータセットの場合、これは並べ替えの完了に時間がかかり、結果として実行時間が 1 時間かかるため、効率的なアプローチではありません。したがって、バブル ソートでは、必要なスワップがすべて完了するまでに時間がかかります。ただし、改良型バブル ソートと呼ばれるバブル ソートの改良版があり、より効率的でこのようなユースケースに使用できます。O(n2)
バブル ソート、挿入、および選択ソート アルゴリズムの比較
次の図は、時間と空間の複雑さの観点から、バブル、挿入、および選択ソート アルゴリズムを比較しています。
最悪の場合の空間の複雑さ | 平均的な場合空間の複雑さ | 最良の場合の時間計算量 | |
---|---|---|---|
バブルソートアルゴリズム | O(n^2) 和 O(1) | O(n^2) | の上) |
選択ソートアルゴリズム | O(n^2) 和 O(1) | O(n^2) | O(n^2) |
挿入ソートアルゴリズム | O(n^2) 和 O(1) | O(n^2) | の上) |
上記の比較から、バブル アルゴリズムと挿入ソート アルゴリズムの間には関連性があることがわかります。ただし、挿入ソート アルゴリズムは、操作を完了するためにバブル ソートよりも少ないスワップを必要とします。
バブルソートアルゴリズム: パフォーマンス
バブル ソート アルゴリズムのパフォーマンスは、バブル ソート アルゴリズムが小規模なデータセットにのみ適していることを明らかに示しており、最悪の場合の時間計算量と空間計算量は異なります。O(n2)「O(n)」
バブル ソートで発生するスワップの数は、元に戻される指定された配列内のログの数と同じです。したがって、スワップが増えるほど、バブル ソート アルゴリズムにかかる時間が長くなります。
結論は
このチュートリアルでは、総合的な観点から Kotlin のいくつかの並べ替えアルゴリズムをレビューしました。バブル ソート アルゴリズム、その利点、実装、課題、パフォーマンスに焦点を当てます。バブル アルゴリズムは並べ替えアルゴリズムの種類を理解する最も簡単な方法ですが、大規模で複雑なデータセットには適していないと判断しました。
この記事を楽しんでいただければ幸いです。Android アプリケーションを開発する際にこのアルゴリズムを採用する場合は、必ずコメントを残してください。コーディングを楽しんでください!