クイックソートの各ループの原則は、temp変数を、それよりも小さいすべての要素がtempに置き換えられ、より大きな要素が右側に置かれる位置に設定することです。したがって、ループでなければならないのは、tempよりも大きい数とleftよりも大きい数があれば、検索するための右回りの繰り返しが両方とも含まれているということです。存在する場合は、現在のコンテンツを反対側に置き、リストの全体的な反復まで反対側から反復します。ループの後、tempより小さいすべての要素は左側にあり、大きな要素は右側にある必要があります。
temp = list[first];
int f = first, l = last;
while (f < l)
{
while ((f <= l) && (list[l] < temp)) l--;
if (f <= l)
{
list[f] = list[l];
f++;
}
while ((f <= l) && (list[f] > temp)) f++;
if (f <= l)
{
list[l] = list[f];
l--;
}
}
コードのこの作品は、動作するはずです。(私は、このコンピュータ上のコンパイラを持っていない)、それは、再帰関数自体を起動しようとしない場合。
さらに、アドバイスがあります。多くの人があなたにお勧めしているように、デバッグを試みて問題を自分で解決してください。
希望する
デバッガにアクセスできますか?デバッガの使い方を知っていることは貴重なスキルです。もしあなたが使っていれば、あなたはすでにあなたの答えを持っているでしょう。 –
宿題の場合は、そのまま宿題にしてください。そうでなければ 'std :: sort'を使ってください。 –
ここをクリックしてください:http://en.wikipedia.org/wiki/Quicksort –