|
手続sortは、要素数が2以上の整数型の配列を引数numberArrayで受け取りその要素を照準に並べ替えた結果を出力する。
手続sortの動作確認のために、処理の途中でjの値とworkArrayの全ての要素を出力する。
配列numberArrayを{3, 5, 1, 2, 4}とし、手続sortをsort(numberArray)として呼び出したとき、jの値が3と出力された直後のworkArray全ての要素の出力はどれか。
ここで、配列の要素番号は1から始まる。
[プログラム]
〇sortをsort(整数型の配列: numberArray)
整数型: minIndex, j, k
整数型の配列: workArray ← numberArray // 配列の複製を作る
for(jを1から(workArrayの要素数 - 1)まで1ずつ増やす)
// j番目から末尾までの要素の中で最も小さい値をもつ要素の要素番号を
// 一つ求める
minIndex ← j
for(kを(j + 1)からworkArrayの要素数まで1ずつ増やす)
if(workArray[k]がworkArray[minIndex]より小さい)
minIndex ← k
endif
endfor
workArray[j]とworkArray[minIndex]の値を入れ替える
// 動作確認のために、jの値とworkArrayの全ての要素を出力する
jの値を出力する
workArrayの全ての要素を先頭から順にコンマ区切りで出力する
| ア |
1, 2, 3, 4, 5 |
|
イ |
1, 2, 3, 5, 4 |
| ウ |
4, 5, 3, 2, 1 |
|
エ |
5, 4, 3, 2, 1 |
答え イ
【解説】
この問題のプログラムは配列の中の最も小さい要素を探して、それを配列の先頭の要素と入れ替える処理を繰り返しているので、配列numberArray(numberArray)が{3, 5, 1, 2, 4}のとき処理を行うと、
@j = 1ではnumberArrayは一番小さい要素1を配列の先頭にして{1, 5, 3, 2, 4}になる。
Aj = 2ではnumberArrayは二番目に小さい要素2を配列の二番目にして{1, 2, 3, 5, 4}になる。
Bj = 3ではnumberArrayは三番目に小さい要素3は配列の三番目なので、そのままの{1, 2, 3, 5, 4}(イ)になる。
【キーワード】
・整列方法
【キーワードの解説】
- 整列方法(ソート)
データの並び替えのことで様々な方法がある。
- クイックソート
ソートするデータから、適当な数を選択し、データをその数より大きいほうと小さいほうに分け、分けたデータに対し、この操作を繰り返す。
- シェルソート
適当に間隔を開けたデータを取り出し並び替えを行い、間隔を小さくしながらこの操作を繰り返す。
- バブルソート
n個のデータに対して、データの1番目と2番目を比較し順番が逆なら入れ替え、次に2番目と3番目で比較し、…、n-1番目とn番目で比較を行う。(n番目のデータの整列)
その次に、1番目と2番目、2番目と3番目、…、n-2番目とn-1番目。(n-1番目のデータの整列)
その次に、1番目と2番目、2番目と3番目、…、n-3番目とn-2番目。(n-2番目のデータの整列)
この処理を繰り返し行い整列する。
- ヒープソート
未整列のデータから要素を1個づつ取り出し、ヒープ構造を作りながらデータのソートを行う。
- マージソート
データ列を2分割し、2分割したデータ列に対しソートを行い、分割したデータ列を合わせて(マージして)ソートを行う。
なお、どのソートを使用するかは、ソートを行うデータの構造によっても変わってきます。
もっと、「ソート」について調べてみよう。
戻る
一覧へ
次へ
|