Javaでの挿入ソートの実装例を詳しく解説
この記事では、主に Java のデータ構造と挿入ソートのアルゴリズムを紹介し、Java 挿入ソートの概念、分類、原理、実装方法、および関連する注意事項をサンプルの形式で分析します。この記事では、Java データ構造とアルゴリズム挿入ソートについて説明します。詳細は以下の通りです:
データ構造におけるソートに関する知識を整理したので、より多くの人に共有したいと思い、書き留めました。将来の参照のためにバックアップを作成することです。
ソート
1. 概念:n 個の記録されたシーケンス {R1, R2,....,Rn} があります (ここで注意: 1,2,n は次のテーブルシーケンスです、以下も同じ効果があります)、対応するキーワードのシーケンスは {K1, K2,.......,Kn} です。ソートを通じて、対応するキーワードが次の非減少 (非増加) 関係を満たすように、現在の添え字シーケンス 1,2,...,n の配列 p1, p2,...pn を見つける必要があります。 、つまり、Kp1
2. 分類ソート中にデータが占有するメモリの違いに基づいて、ソートは 2 つのカテゴリに分類できます。
内部ソート:以下のように、ソートプロセス全体がメモリ内で完全に実行されます:
挿入ソート (直接挿入ソート、半挿入ソート、ヒルソート)交換ソート (選択ソート(単純な分散ソート(複数キーワードソート、チェーン基数ソート、基数)ソート シーケンス テーブルの実装));
外部ソート:
ソートするレコード データが大量であるため、メモリにすべてのデータを収容できず、ソートは外部ストレージ デバイスの助けを借りて完了する必要があります ()ディスクのソート、テープのソート )。
3. 安定性 ソート対象のシーケンス内に同じキーワードを持つ複数のレコードがあると仮定します。 Ki=Kj(1
挿入ソート: アイデア: すべてのレコードが挿入されるまで、キー サイズに従って、ソート対象のレコードが以前にソートされたサブファイル内の適切な位置に挿入されるたびに。
直接挿入ソート:
アルゴリズムのアイデア: ソートされるレコードが arrayR[1..n] に格納されていると仮定します。最初に、R[1] は順序付き領域を形成し、順序なし領域は R[2..n] になります。 i=2 から i=n まで、R[i] が現在の順序付け領域 R[1..i-1] に順番に挿入され、n 個のレコードを含む順序付き領域が生成されます。 Java で実装されたコードは次のとおりです:
package exp_sort; public class DirectInsertSort { public static void DircstSort(int array[]) { int j; // 循环从第二个数开始,第一个数用做存放待插入的记录 for (int i = 1; i < array.length; i++) { int temp = array[i]; // 寻找插入位置 for (j = i; j > 0 && temp < array[j - 1]; j--) { array[j] = array[j - 1]; } // 将待插入记录插入到已经排序的序列中 array[j] = temp; } for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } System.out.println("\n"); } public static void main(String[] args) { // TODO Auto-generated method stub int array[] = { 38, 62, 35, 77, 55, 14, 35, 98 }; DircstSort(array); } }
アルゴリズム分析:
最良のケースは、ソートされるレコード自体がキーワードに従って順序付けされている場合であり、最悪のケースは、ソートされるレコードはキーワードに従って逆順に配置されます。
時間計算量は O(N^2)、空間計算量は O(1) です。
このアルゴリズムは安定したソート アルゴリズムです。ソートするレコードの数が少なく、基本的に順序が整っている状況 に適しています。 目的挿入ソート:
アルゴリズムの実装コードは次のとおりです:
package exp_sort; public class BinaryInsertSort { public static void sort(int array[]) { int temp, low, mid, high; for (int i = 1; i < array.length; i++) { temp = array[i]; low = 0; high = i -1; //确定插入位置 while (low <= high) { mid = (low + high) / 2; if (temp < array[mid]) { high = mid - 1; } else { low = mid + 1; } } //记录依次向后移动 for (int j = i; j >= low + 1; j--) { array[j] = array[j-1]; } //插入记录 array[low] = temp; } for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } System.out.println("\n"); } public static void main(String[] args) { // TODO Auto-generated method stub int array[] = {38, 62, 35, 77, 55, 14, 35, 98}; sort(array); } }
は安定した並べ替えアルゴリズムであり、直接挿入アルゴリズムよりもキーワード間の比較の数が大幅に削減されるため、
は直接挿入よりも高速ですソート アルゴリズム を変更しましたが、レコードの移動数は変わっていないため、半減挿入ソート アルゴリズムの
直接挿入ソート アルゴリズムと同じです。 追加スペース O(1)。 【関連推奨事項】1.
特別な推奨事項: 「php Programmer Toolbox」V0.1バージョンのダウンロード
以上がJavaでの挿入ソートの実装例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。
