- 演習1:ヒープ構造を作れ
コツとしては、
・左側優先
・左が一区切り付いたら右側を見る(各段で)。
@親より子の方が大きいので入れ換える。
Aここで一度右側を見る。
今回は親の方が大きいのでそのまま。
B上3つ分は現状でのソートが済んだので1段下を左側から見ていく。
親より子の方が大きいので入れ換える。
C入れ替えた先の親とも比較。
ここでも親より子の方が大きいので入れ換える。
D親の方が子より大きいのでそのまま。
E親より子の方が大きいので入れ換え。
F入れ替えた後、更に親とも比較。
8<9と親より子の方が大きいので入れ換え。
G親より子の方が大きいので入れ換え。
H更に入れ替え先の親とも比較。
9<10なので入れ換え。
I親より子の方が大きいので入れ換え。
J更に入れ替え先の親とも比較、今回は入れ換え。
K更に入れ替え先の親とも比較、今回はそのまま。
L親の方が子より大きいのでそのまま。
M親より子の方が大きいので入れ換え。
N更に入れ替え先の親とも比較、今回は入れ換え。
O更に入れ替え先の親とも比較、今回は入れ換え。
P親の方が子より大きいのでそのまま。
従ってヒープ構造は上記の様になる。
- 演習2:バブルソートでN個のデータについて、
@比較回数は何回か?
バブルソートにおける並び換えで、1つの値を確定するまでに行う比較回数はn-1回。
以降の確定までに行う比較回数はn-2回,n-3回・・・2回,1回となる。
従って比較回数は
(n-1)+(n-2)+・・・+2+1
=((n-1)+1)×(n-1)/2
=(n2-n)/2
となる。
A入れ替え回数の最大と最小を求めよ。
最小:最初からソートされている数列の場合は入れ換えはない。
従って比較回数は0回。
最大:比較の度に入れ換えも行う場合に最も入れ替え回数が多くなる。
従って最大回数は(n2-n)/2