120 likes | 282 Views
n 個の整数を入力、配列 a[1],a[2],…a[n] に入れる. 配列の中身を小さい順に並び替える. a[1],a[2],…a[n] の値を順に出力する. ソートのプログラムの流れ. 扱う問題 : n 個の整数を小さい順に並べる. 91 28 36 77 51 11. 最も手間のかかる部分. よいアルゴリズムの必要性. 11. 28. 36. 51. 77. 91. 今回の授業で説明 . ソートアルゴリズムの種類. 選択ソート (selection sort) バブルソート (bubble sort)
E N D
n個の整数を入力、配列 a[1],a[2],…a[n]に入れる 配列の中身を小さい順に並び替える a[1],a[2],…a[n]の値を順に出力する ソートのプログラムの流れ 扱う問題: n個の整数を小さい順に並べる 91 28 36 77 51 11 最も手間のかかる部分 よいアルゴリズムの必要性 11 28 36 51 77 91
今回の授業で説明 ソートアルゴリズムの種類 • 選択ソート (selection sort) • バブルソート (bubble sort) • 挿入ソート (insertion sort) • クイックソート (quick sort) • マージソート (merge sort) などなど
1 1 3 4 4 4 37 37 29 12 12 12 12 61 73 37 95 55 a[1] とa[min]を交換 選択ソート(selection sort)― その1 a[1], …,a[6] の 中から最小値 a[min]を見つける min = a[min] =
12 29 61 37 95 55 a[2] とa[min]を交換 選択ソート ― その2 a[2], …,a[6] の 中から最小値 a[min]を見つける 29
12 29 37 61 95 55 12 29 37 55 95 61 12 29 37 55 61 95 選択ソート ― その3 a[3],…,a[6]の中での最小値を見つけa[3]と交換 a[4],…,a[6]の中での最小値を見つけa[4]と交換 a[5],a[6]の中での最小値を見つけa[5]と交換 ソート完了
基本操作: a[i] > a[i+1] ⇒ 中身を交換 a[5] > [6] 37 61 29 12 55 95 a[5] とa[6]を交換 バブルソート(bubble sort)― その1 ソートの目的:a[1]≦a[2]≦・ ・ ・ ≦a[n-1]≦a[n]
a[4] ≦ [5] なのでそのまま 37 61 29 12 55 95 a[3] > [4] なので交換 37 61 12 29 55 95 a[2] > [3] なので交換 37 12 61 29 55 95 a[1] > [2] なので交換 12 37 61 29 55 95 バブルソート ― その2 a[1] =12は最小値!
バブルソート ― その3 交換 交換 交換 a[3]=37は3番目に小さい値 a[2]=29は2番目に小さい値
バブルソート ― その4 a[5]=61は5番目に小さい値a[6]=95は6番目に小さい値 a[4]=55は4番目に小さい値
挿入ソート(insertion sort)― その1 a[1], a[2]をソート a[1],…, a[3]をソート a[1], …, a[4]をソート a[1], …, a[5]をソート a[1], …, a[6]をソート ソート終了!
ここに挿入 a[1], …, a[5]の間に a[6]を挿入すればよい tmp=55 15 24 37 86 91 挿入ソート ― その2 各反復の実行方法 a[5]までソートされていると仮定 a[6]までソート 挿入のやり方 91 > 55 37≦55 86 > 55
37 91 15 24 86 55 a[1], a[2]をソート 37 91 15 24 86 55 a[1], a[2]に a[3]を挿入 15 37 91 24 86 55 a[1], …, a[3]に a[4]を挿入 15 24 37 91 86 55 a[1], …, a[4]に a[5]を挿入 15 24 37 86 91 55 a[1], …, a[5]に a[6]を挿入 15 24 37 55 86 91 ソート終了! 挿入ソート ― その3