pontz_rwのブログ

プログラミング等の備忘録

ALDS1_1_A: 挿入ソート

問題

解答

問題文に記載されている挿入ソートのアルゴリズムを実装します。出力は、ソート前に 1 回と、各計算ステップの途中経過を N - 1 回の、合計 N 回行います。

C++

#include <iostream>
using namespace std;

const int MAX_N = 100;

// 配列の要素を出力
void trace(int (&A)[MAX_N], int N) {
    for (int i = 0; i < N; ++i) {
        if (i > 0) {
            cout << " ";
        }
        cout << A[i];
    }
    cout << endl;
}

// 挿入ソート
void insertionSort(int (&A)[MAX_N], int N) {
    for (int i = 1; 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;
        trace(A, N);
    }
}

int main() {
    int N;
    int A[MAX_N];

    // 入力
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> A[i];
    }

    // 配列の要素を出力
    trace(A, N);

    // 挿入ソート
    insertionSort(A, N);

    return 0;
}

Python

# coding: utf-8

N = int(input())
A = list(map(int, input().split()))

print(*A)

for i in range(1, len(A)):
    v = A[i]
    j = i - 1
    while j >= 0 and A[j] > v:
        A[j + 1] = A[j]
        j -= 1
    A[j + 1] = v
    print(*A)