挿入ソート

挿入ソートは手持ちのトランプを並び替えるときに使われる、自然で思いつきやすいアルゴリズムの1つである。片手に持ったトランプを左から小さい順に並び替える場合、1枚ずつカードを取り出して、それをその時点ですでにソートされている並びの適切な位置に挿入していくことによって、カードを並び替えることができる。 プログラム中の while (j >= 0 && A[j] > v) という部分は、「左側にずらしながら挿入場所を探す」作業をしている。

アルゴリズム

void InsertionSort(int A[], int N)
{
    for (int i = 0; i < N; i++)
    {
        int v = A[i];
        int j = i - 1;
        while (j >= 0 && A[j] > v)
        {
            A[j + 1] = A[j];
            j--;
        }
        A[j + 1] = v;

        printArray(A, N);
    }
}

N個の要素を含む数列Aを昇順に並び替えるバブルソートのプログラムは以下のようになる。

#include <stdio.h>

void printArray(int A[], int N);

void InsertionSort(int A[], int N)
{
    for (int i = 0; i < N; i++)
    {
        int v = A[i];
        int j = i - 1;
        while (j >= 0 && A[j] > v)
        {
            A[j + 1] = A[j];
            j--;
        }
        A[j + 1] = v;

        printArray(A, N);
    }
}

void printArray(int A[], int N)
{
    for (int i = 0; i < N; i++)
    {
        printf("%d", A[i]);
        if (i < N - 1)
        {
            printf(" ");
        }
    }
    printf("\n");
}

int main()
{
    int N;
    scanf("%d", &N);
    int A[N];
    for (int i = 0; i < N; i++)
    {
        scanf("%d", &A[i]);
    }

    InsertionSort(A, N);

    return 0;
}

最新の記事・更新

  • 2026-02-08: サイトを開設しました。

© 2026 shunchama. Built with GitHub Pages.


This site uses Just the Docs, a documentation theme for Jekyll.