ホームページ > Java > &#&チュートリアル > 挿入ソートアルゴリズムの理解 (Java の例付き)

挿入ソートアルゴリズムの理解 (Java の例付き)

Patricia Arquette
リリース: 2025-01-18 02:16:13
オリジナル
594 人が閲覧しました

挿入ソートは、反復的なソート アルゴリズムです。ソートされていない各要素をソートされた部分配列内の正しい位置に挿入することにより、一度に 1 要素ずつソートされたサブ配列を構築します。 トランプの手札を並べ替えることを考えてください。並べ替えた 1 枚のカードから始めて、後続の各カードを、すでに並べ替えられたカードの適切な場所に挿入します。

挿入ソートの仕組み

昇順に並べ替える配列の例を示します。

Understanding Insertion Sort Algorithm (with Examples in Java)

最初の反復:

最初の要素はすでにソートされているとみなします。 アルゴリズムは 2 番目の要素から始まります。

Understanding Insertion Sort Algorithm (with Examples in Java)

2

Understanding Insertion Sort Algorithm (with Examples in Java)

2 番目の反復:

6 をソートされた部分配列 (2, 8) と比較します。 6

Understanding Insertion Sort Algorithm (with Examples in Java)

このプロセスは、配列全体がソートされるまで続きます。

Understanding Insertion Sort Algorithm (with Examples in Java) Understanding Insertion Sort Algorithm (with Examples in Java) Understanding Insertion Sort Algorithm (with Examples in Java)

Java での実装

<code class="language-java">import java.util.Arrays;

public class InsertionSortTest {
    public static void main(String[] args) {
        int[] arr = {8, 2, 6, 4, 9, 1};
        System.out.println("Unsorted array: " + Arrays.toString(arr));
        insertionSort(arr);
        System.out.println("Sorted array: " + Arrays.toString(arr));
    }

    public static void insertionSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int key = arr[i];
            int j = i - 1;
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = key;
        }
    }
}</code>
ログイン後にコピー

コードは各要素を key として繰り返します。 次に、key とソートされた部分の要素を比較し、key の正しい位置が見つかるまで、より大きな要素を右にシフトします。

たとえば、2 番目の反復 (i=2) では次のようになります。

Understanding Insertion Sort Algorithm (with Examples in Java)

key は 6 です。while ループは、正しい位置が見つかるまで要素をシフトします。

Understanding Insertion Sort Algorithm (with Examples in Java) Understanding Insertion Sort Algorithm (with Examples in Java)

最後に 6 が挿入されます:

Understanding Insertion Sort Algorithm (with Examples in Java)

出力:

ソートされていない配列: [8, 2, 6, 4, 9, 1] ソートされた配列: [1, 2, 4, 6, 8, 9]

複雑さの分析

  • 時間計算量:
    • ベストケース (O(n)): すでにソートされた配列。
    • 平均ケース (O(n²)): ランダムに配置された要素。
    • 最悪の場合 (O(n²)): 逆ソートされた配列。
  • 空間複雑度: O(1) (インプレース アルゴリズム)

結論

挿入ソートの二次時間計算量により、大規模なデータセットの場合は非効率的になります。 ただし、これは単純なアルゴリズムであり、小さなデータセットまたはほぼ並べ替えられたデータに対して適切に実行されます。

以上が挿入ソートアルゴリズムの理解 (Java の例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート