2017-03-04 12 views
-2

私はクイックソートをJavaで実装しようとしましたが、うまくいきません。 私は文字通りそれが間違っていたことは考えていません。クイックソートの実装が期待どおりに動作しない

public static void quicksort(int[] array, int left, int right) { 
    if (left >= right) { 
     return; 
    } 
    int pivot = new SplittableRandom().nextInt(right - left) + left; 
    int pivotValue = array[pivot]; 
    int i = left; 
    int j = right; 
    int buffer; 
    while (i < j) { 
     if (array[i] > pivotValue) { 
      if (array[j] < pivotValue) { 
       buffer = array[i]; 
       array[i] = array[j]; 
       array[j] = buffer; 
      } else { 
       j--; 
      } 
     } else { 
      i++; 
     } 
    } 
    array[pivot] = array[i]; 
    array[i] = pivotValue; 
    quicksort(array, left, i-1); 
    quicksort(array, i+1, right); 
} 
+0

http://stackoverflow.com/questions/14907334/stackoverflow-with-quicksions-java-implementationの可能な複製 – Smit

+0

[Quicksort Java実装によるStackoverflow]の可能な複製(http://stackoverflow.com/questions/14907334)/stackoverflow-with-quicksort-java-implementation) – azro

+0

これは、デバッガを使用する方法を学習する必要がある場所です。学習への投資はあなたのキャリアを通して多くの時間を返すでしょう。 –

答えて

0

それは単純な例と例との簡単かつまだ簡単です:ここに は、私がこれまで持っているものです。

int[] myArray = { 1, 0 }; 
YourClass.quicksort(myArray, 0, myArray.length - 1); 

今、あなたの方法はwhileループの最初の反復を通じてとる方法を把握しようとするので、pivotValue 1.今、あなたの方法はpivot 0を選択したとします。次に、その反復後のiの値は何ですか?次は何が起こる?これらの質問に答えることができれば、コードがどのように悪くなっているかを把握することもできます。

私はまだコメントで言ったことを意味します。これは、デバッガを使うことを学ぶ必要がある場所です。学習への投資はあなたのキャリアを通して多くの時間を返すでしょう。

+0

デバッガで見つけようとしましたが、この状況で動作するものを1つ変更すると、別の状況では動作しません。 –

+0

あなたの問題があります。私はあなたのためにそれを解決できるとは思わない、私は恐れている、あなたのためのメソッドを書き直すことなく、スタックオーバーフローのポイントではありません。私は試行錯誤とエラーとエラーがイライラすることがあることを知っています... –

+0

しかし、私の主な間違いはどこに教えてください? –

関連する問題