2016-08-27 12 views
-3

ピボットを配列の最初の要素に変更しましたが、このQuicksortアルゴリズムはまだOKですか?データ配列内の変数 "l"はすべての分割ステップの最初の要素ですか?このQuicksortは正しいですか?

X =データ[L] //ピボット

おかげ

public void QuickSort(int[] data) 
    { 
     QuickSort(data, 0, data.Length - 1); 

    } 
    private void QuickSort(int[] data, int l, int r) 
    { 
     int i, j; 
     int x; 
     i = l; 
     j = r; 
     x = data[l]; 
     while (true) 
     { 
      while (data[i] < x) 
      { 
       i++; 
      } 
      while (data[j] > x) 
      { 
       j--; 
      } 
      if (l <= j) 
      { 
       int temporary = data[i]; 
       data[i] = data[j]; 
       data[j] = temporary; 
       i++; 
       j--; 
      } 
      if (i > j) 
      { 
       break; 
      } 
     } 
     if (l < j) 
     { 
      QuickSort(data, l, j); 
     } 
     if (i < r) 
     { 
      QuickSort(data, i, r); 
     } 

    } 
+0

[codereview](http://codereview.stackexchange.com/)に適しています – DarkBee

答えて

0
static public int Partition(int[] numbers, int left, int right) 
     { 
      int pivot = numbers[left]; 
      while (true) 
      { 
       while (numbers[left] < pivot) 
        left++; 

       while (numbers[right] > pivot) 
        right--; 

       if (left < right) 
       { 
        int temp = numbers[right]; 
        numbers[right] = numbers[left]; 
        numbers[left] = temp; 
       } 
       else 
       { 
        return right; 
       } 
      } 
     } 

     static public void QuickSort(int[] arr, int left, int right) 
     { 
      // For Recusrion 
      if (left < right) 
      { 
       int pivot = Partition(arr, left, right); 

       if (pivot > 1) 
        QuickSort(arr, left, pivot - 1); 

       if (pivot + 1 < right) 
        QuickSort(arr, pivot + 1, right); 
      } 
     } 

あなたのロジックは、このロジックOK試みではありません最初にそれを理解し、それはあなたのと似ていますが、若干の違い

関連する問題