クイックソートによる配列の整列【基本情報技術者試験 科目B 公開問題】

令和5年度 基本情報技術者試験 サンプル問題 科目B 問3のブログのアイキャッチ画像 科目B 公開問題
広告

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目Bの公開問題を題材に,クイックソートによる配列の整列について学習します。この問題では,基準値(pivot)を使って配列を分割し,左右から要素を探索する処理を確認します。

広告

令和5年度 基本情報技術者試験 公開問題 科目B 問3

 次の記述中の       に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。

 次の手続 sort は,大域の整数型の配列 data の,引数 first で与えられた要素番号から引数 last で与えられた要素番号までの要素を昇順に整列する。ここで,first < last とする。手続 sort を sort(1,5) として呼び出すと,/*** α ***/ の行を最初に実行したときの出力は “       ” となる。

〔プログラム〕

大域: 整数型の配列: data ← {2,1,3,5,4}

○sort(整数型: first,整数型: last)

 整数型: pivot,i,j

 pivot ← data[(first + last) ÷ 2 の商]

 i ← first

 j ← last

 while (true)

  while (data[i] < pivot)

   i ← i + 1

  endwhile

  while (pivot < data[j])

   j ← j - 1

  endwhile

  if (i ≧ j)

   繰返し処理を終了する

  endif

  data[i]とdata[j]の値を入れ替える

  i ← i + 1

  j ← j - 1

 endwhile

 dataの全要素の値を要素番号の順に空白区切りで出力する  /*** α ***/

 if (first < i - 1)

  sort(first,i - 1)

 endif

 if (j + 1 < last)

  sort(j + 1,last)

 endif

解答群

ア 1 2 3 4 5イ 1 2 3 5 4
ウ 2 1 3 4 5エ 2 1 3 5 4

【解答】

【解説】

sort は,クイックソートの処理を行う手続である。最初に,整列する範囲の中央の要素を pivot とする。sort(1,5) では,pivot = data[3] = 3 となる。左から pivot 以上の要素を探すと,data[3] = 3 で i = 3 となる。右から pivot 以下の要素を探すと,data[3] = 3 で j = 3 となる。このとき i = j = 3 なので,if文の条件「i ≧ j」が成立する。そのため,繰返し処理を終了し,data[i] と data[j] の交換も行われない。したがって,配列は {2,1,3,5,4} のままであり,/*** α ***/ の最初の出力は「2 1 3 5 4」となる。

「令和5年度 基本情報技術者試験 公開問題 科目B 問3」の解答_画像

この問題のポイント

 この問題から学べることは,

  • クイックソートの基本的な処理
  • pivot を基準に配列を分割する方法
  • iとjを使って左右から要素を探索する方法
  • 繰返し処理を終了する条件の読み取り方
  • 再帰的に部分配列を整列する方法

です。特に,i ≧ j が成立すると,その時点で繰返し処理を終了し,その後に書かれている要素の入替え処理は実行されないことを理解しておきましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告