0
クイックソートアルゴリズムを使用してバイナリファイルをソートしようとしています。私はマージソートアルゴリズムを行い、7秒で10,000,000の数値をソートすることができました。私はクイックソートがそれをより速く行うかどうかを見極めようとしていますが、クイックソートを動作させるのに問題があります。データは正しくソートされますが、バイナリファイルから4が取り込まれ、10に変換されます。Quicksortアルゴリズムが機能しない、4の代わりに10を表示
私はquicksortを呼び出します。Quicksort(size、1、arrayToSort); - Sizeはバイナリリストのサイズなので、変更しています。私は10個の数字をテストしていますので、今は10であり、高い、またはhを表しています。私は1ベースで始まっているので、私は1をlow、またはlに使用しています。私はパーティションとソート機能を組み合わせて、1つの大きな機能に過ぎません。どんなアイデアも助けてくれます。
void Quicksort(int h, int l, int *arrayToSort)
{
int Pivot = arrayToSort[(l + h)/2];
arrayToSort[Pivot] = arrayToSort[l];
int templ = l, temph = h;
while (true)
{
while (arrayToSort[h] > Pivot && l < h)
{
h--;
}
if (l < h)
{
arrayToSort[l] = arrayToSort[h];
l++;
}
else
{
arrayToSort[h] = Pivot;
break;
}
while (arrayToSort[l] < Pivot && l < h)
{
l++;
}
if (l < h)
{
arrayToSort[h] = arrayToSort[l];
h--;
}
else
{
arrayToSort[l] = Pivot;
break;
}
}
if (l - templ >= 2)
Quicksort(h - 1, templ, arrayToSort);
if (temph - h >= 2)
Quicksort(temph, l + 1, arrayToSort);
}
IF(L - TEMPL> = 2) \t \tクイックソート(H - 1、TEMPL、arrayToSort)。 \t if(temph -h> = 2) \t \t Quicksort(temph、l + 1、arrayToSort); whileループの最下部にも追加する必要があります。残念です。 – Cavustius
あなた自身の質問に答えることができます。それをコメントに限定する必要はありません。 –
なぜあなたは自分のソートルーチンを書いていますか? –