sort_examples (UTF-8 / 埋め込み表示) txtを直接開く(環境によっては文字化け)
// ============================================
// ソートアルゴリズムのサンプル(科目B記法)
// 各節をコピーしてコード欄へ貼って実行してください
// ============================================

// ============================================
// 1. バブルソート(Bubble Sort)
// ============================================
// 隣り合う要素を比較して入れ替える
// 時間計算量: O(n²)

整数型の配列: A ← { 7, 3, 9, 4, 6 }
整数型: N, i, j, temp
N ← Aの要素数

for (i を 1 から N − 1 まで 1 ずつ増やす)
    for (j を 1 から N − i まで 1 ずつ増やす)
        if (A[j] > A[j + 1])
            temp ← A[j]
            A[j] ← A[j + 1]
            A[j + 1] ← temp
        endif
    endfor
endfor

for (i を 1 から N まで 1 ずつ増やす)
    A[i] を出力
endfor

// ============================================
// 2. 選択ソート(Selection Sort)
// ============================================
// 最小値を見つけて先頭へ移す
// 時間計算量: O(n²)

整数型の配列: A ← { 7, 3, 9, 4, 6 }
整数型: N, i, j, minPos, temp
N ← Aの要素数

for (i を 1 から N − 1 まで 1 ずつ増やす)
    minPos ← i
    for (j を i + 1 から N まで 1 ずつ増やす)
        if (A[j] < A[minPos])
            minPos ← j
        endif
    endfor
    if (minPos ≠ i)
        temp ← A[i]
        A[i] ← A[minPos]
        A[minPos] ← temp
    endif
endfor

for (i を 1 から N まで 1 ずつ増やす)
    A[i] を出力
endfor

// ============================================
// 3. 挿入ソート(Insertion Sort)
// ============================================
// 未整列の先頭を、整列済みの適切な位置へ挿入する
// 時間計算量: O(n²)

整数型の配列: A ← { 7, 3, 9, 4, 6 }
整数型: N, i, j, key
N ← Aの要素数

for (i を 2 から N まで 1 ずつ増やす)
    key ← A[i]
    j ← i − 1
    while ((j ≧ 1) and (A[j] > key))
        A[j + 1] ← A[j]
        j ← j − 1
    endwhile
    A[j + 1] ← key
endfor

for (i を 1 から N まで 1 ずつ増やす)
    A[i] を出力
endfor

// ============================================
// 4. クイックソート(Quick Sort)
// ============================================
// 分割統治。平均 O(n log n)、最悪 O(n²)

整数型の配列: A ← { 7, 3, 9, 4, 6 }
整数型: N
N ← Aの要素数
QuickSort(1, N)
for (i を 1 から N まで 1 ずつ増やす)
    A[i] を出力
endfor

○QuickSort(整数型: left, 整数型: right)
    整数型: pivot, i, j, swapTemp
    if (left ≧ right)
        return
    endif
    pivot ← A[right]
    i ← left
    for (j を left から right − 1 まで 1 ずつ増やす)
        if (A[j] ≦ pivot)
            swapTemp ← A[i]
            A[i] ← A[j]
            A[j] ← swapTemp
            i ← i + 1
        endif
    endfor
    swapTemp ← A[i]
    A[i] ← A[right]
    A[right] ← swapTemp
    if (i − 1 > left)
        QuickSort(left, i − 1)
    endif
    if (i + 1 < right)
        QuickSort(i + 1, right)
    endif

// ============================================
// 5. マージソート(Merge Sort)
// ============================================
// 分割統治の安定ソート。時間計算量 O(n log n)

整数型の配列: A ← { 7, 3, 9, 4, 6 }
整数型の配列: temp ← { 0, 0, 0, 0, 0 }
整数型: N
N ← Aの要素数
MergeSort(1, N)
for (i を 1 から N まで 1 ずつ増やす)
    A[i] を出力
endfor

○MergeSort(整数型: left, 整数型: right)
    整数型: mid
    if (left ≧ right)
        return
    endif
    mid ← (left + right) ÷ 2
    MergeSort(left, mid)
    MergeSort(mid + 1, right)
    Merge(left, mid, right)

○Merge(整数型: left, 整数型: mid, 整数型: right)
    整数型: i, j, k, m
    i ← left
    j ← mid + 1
    k ← left
    while ((i ≦ mid) and (j ≦ right))
        if (A[i] ≦ A[j])
            temp[k] ← A[i]
            i ← i + 1
        else
            temp[k] ← A[j]
            j ← j + 1
        endif
        k ← k + 1
    endwhile
    while (i ≦ mid)
        temp[k] ← A[i]
        i ← i + 1
        k ← k + 1
    endwhile
    while (j ≦ right)
        temp[k] ← A[j]
        j ← j + 1
        k ← k + 1
    endwhile
    for (m を left から right まで 1 ずつ増やす)
        A[m] ← temp[m]
    endfor

// ============================================
// 6. 降順ソート(選択ソート)
// ============================================
// 大きい順に並べ替える

整数型の配列: A ← { 7, 3, 9, 4, 6 }
整数型: N, i, j, maxPos, temp
N ← Aの要素数

for (i を 1 から N − 1 まで 1 ずつ増やす)
    maxPos ← i
    for (j を i + 1 から N まで 1 ずつ増やす)
        if (A[j] > A[maxPos])
            maxPos ← j
        endif
    endfor
    if (maxPos ≠ i)
        temp ← A[i]
        A[i] ← A[maxPos]
        A[maxPos] ← temp
    endif
endfor

for (i を 1 から N まで 1 ずつ増やす)
    A[i] を出力
endfor