2017-09-20 7 views
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); 
} 
+0

IF(L - TEMPL> = 2) \t \tクイックソート(H - 1、TEMPL、arrayToSort)。 \t if(temph -h> = 2) \t \t Quicksort(temph、l + 1、arrayToSort); whileループの最下部にも追加する必要があります。残念です。 – Cavustius

+0

あなた自身の質問に答えることができます。それをコメントに限定する必要はありません。 –

+0

なぜあなたは自分のソートルーチンを書いていますか? –

答えて

0

最初のバグは、ピボットの位置ではなく、ピボットの位置を上書きすることです。

arrayToSort[Pivot] = arrayToSort[l]; 
関連する問題