<前提>
これはリスト挙動が前提です。
リスト挙動とは、リスト(配列とほぼ同義)に追加、削除が許されます。
リストに(通常は最後に)データを追加するとリストは1つ長くなります
>a はなぜエ(4)?
⇒
答え: エ(4)
最大比較回数は5回迄、
繰返し処理ブロックの実行回数は4回
(5回目は繰返し処理ブロックは実行されません)
★詳細は添付図のトレース参照
>b はなぜウ?
⇒
★詳細は添付図のトレース参照
>Cはなぜイ(2)?
⇒
★詳細は添付図のトレース参照
>設問2: dはなぜイ?
挿入関数(挿入位置、データ)
一つずつ後ろへデータを移す実装部分は以下の何れか
a)テーブル[添字+1] ← テーブル[添字]
b)テーブル[添字] ← テーブル[添字-1]
a)で実装するときは、添字初期値=N-1 , 繰返し判定式(添字≧挿入位置)
b)で実装するときは、添字初期値=N , 繰返し判定式(添字>挿入位置)
ポイントは、
「挿入位置」のデータまで移動させたら、シフト動作の停止タイミングだからです
補足:
データを任意の場所に挿入するにはその位置から以降のデータ群を一つずつ後ろに移動させる必要があります。
このようにデータをシフト動作(データをキャタピラの様に移動)させるには、
・後ろへの移動時は、一番後ろから
・前への移動時は、一番前から
処理します。
逆向きに処理すると、データ上書きされるので少々面倒な実装となります。
・二分探索処理
・挿入処理
の組合せ
二分探索の理解が *今一つ* であれば要点を説明します。
yahoo.co.jp/qa/question_detail/q13321567263">https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13321567263
探索関数
・先頭 ← 0
・末尾 ← データ - 1
・中央 ← (先頭+末尾)/2
■ 先頭 ≦ 末尾 and テーブル[中央] ≠ データ
┃ ▲ テーブル[中央] > データ
┃ ┃ ・成立の時: 末尾 ← 中央 - 1
┃ ┃ ・不成立の時: 先頭 ← 中央 + 1
┃ ▼
┃ ・中央 ← (先頭+末尾)/2
■
▲ 先頭 > 末尾
┃ ...この判定状態は
┃ ....データは見つからなかった、
┃ ....値の小大比較しながら最後の位置は[先頭]
┃ ・要素の挿入(先頭、データ)
┃ ...挿入位置と挿入データを引数に挿入関数呼出し
┃ ・データ数 ← データ数 + 1
▼
~~~~ [トレース表条件] ~~~~
Tbl[] = {1,3,4,6,10,12,16,18,19,23} ...伸びることが可能
N ← 10
検索対象データは15