2012-04-10 6 views
0

私はクイックソートアルゴリズムを実装しており、ピボットを中心に入力配列を分割しました。問題は、同じ入力配列を使って、配列の最初の部分と2番目の部分を再帰的にソートする方法(つまり範囲を指定する方法)が混乱していることです。以下 は、私も私のアルゴリズムの他のinefficenciesに修正されて感謝してください、私の実装クイックソートアルゴリズムと混同しました

class QuickSort { 

    int i; 
    int l = 0; 

    public void quicksort(int A[], int n) { 

     if (n == 1) { 
      return; 
     } else { 
      partition(A, 0, n); 
//----Confused as from this point 
      quicksort(A, A[i]); 

      //Recursively sort both parts of the array 
     } 
    } 

    public int partition(int A[], int l, int r) { 
     int p = A[l];//Choose pivot 
     i = l + 1; 
     //Partition around A through P 
     for (int j = i; j < r; j++) { 
      if (A[j] < p) { 
       swap(A, i, j); 
       ++i; 
      } 
     } 
     swap(A, l, i - 1); 
     return i; 
    } 

    public void swap(int A[], int i, int j) { 
     int temp = A[i]; 
     A[i] = A[j]; 
     A[j] = temp; 
    } 
    public void display(int A[]){ 
     for (int i = 0; i < A.length; i ++){ 
      System.out.print(A[i] + " "); 
     } 
    } 
} 
class QuickSortApp{ 
    public static void main(String args[]){ 
     QuickSort quick = new QuickSort(); 
     int A[] = {6,2,7,8,4,3,5}; 
     quick.quicksort(A, A.length); 
     quick.display(A); 
    } 
} 

です。ありがとう

答えて

1

変更quicksort(int[] A, int begin, int end)以来

にごquicksort()署名、あなたが実際にpartition()の内側に並べ替えました。私がやるべきことは次のとおりです:

if (end-begin <= 1) { 
    return; 
} else { 
    int pivot = partition(A, begin, end); 
    quicksort(A, begin, pivot); 
    quicksort(A, pivot, end); 
} 
0

quicksort(A, i, j)のようなもう1つを呼び出すシグネチャでクイックソートコールのラッパーを作成し、ラッパーからの呼び出しはquicksort(A, 0, n)になります。

+0

お願いします。 – nnanna

関連する問題