返信ありがとうございます。
xの定義について書くのを忘れていました。
xはlowからhighまでの区間を分割する基準値としています。
x=a[low];
です。
実はこれは大学のテストの過去問なのでプログラム全体のソースコードはないんです。
答えがないので、質問させていただきました。
問題文をすべてのせます。
問題
クイックソートにおける分割アルゴリズムを次のように実装した。
このアルゴリズムは、配列aの添え字lowから添え字high間での区間をa[low]を基準値として分割することを目的としているが誤りを含んでいる。
コード:
int i = low;
int j = high;
int x = a[low];
while (i <= j) {
while (a[i] <= x) i++;
while (a[j] => x) j--;
if(i <= j) {
//a[i] とa[j] を入れ替える;
i++; j--;
}
}
(1)low = 0, high = 5で実行したときに、この分割アルゴリズムが正しく動作するような入力例(a[0],....a[5]の6要素の列)をひとつ挙げ、アルゴリズム実行後の配列aの内容とiとjの値を示せ。ただし、入力例とする値の列は、
{5,9,4,2,8,6}の6個の整数値を適切に並べ替えたものとする。
(2)low = 0, high = 5で実行したときに、この分割アルゴリズムが正しく動作しないような入力例(a[0],....a[5]の6要素の列)をひとつ挙げ、その例に対してアルゴリズムを実行したときにどのような誤りが起きるかを述べよ。ただし、入力例とする値の列は、
{5,9,4,2,8,6}の6個の整数値を適切に並べ替えたものとする。
以上が問題文です。
(1)に関しては考えてみたのですが、最初から整列済みの入力例であれば正しく動作するのではないかと思いました。つまり、
{2,4,5,6,8,9}が答えであっていますか?
(2)はよくわかりません。
よろしくお願いします。