2017-03-14 17 views
0

このコードが動作しないのはなぜですか? 次はquicksortの再帰的なアプローチです。 ピボット・テイクの最初の要素として、より良いパーティショニング・アルゴリズムを提案する人もいますか?JAVA QUICKSORT ...なぜこれが動作しないのですか

import java.util.*; 
class QuickSort 
{ 


public static void callQuickSort(int[] array,int left,int right) 
{ 
    if(left<right) 
    { 
     int s = partition(array,left,right); 
     callQuickSort(array,left,s-1); 
     callQuickSort(array,s+1,right);  
    } 

} 

public static int partition(int[] array,int left,int right) 
{ 
    int pI = left;   //pI = partition index 
    int pivot = array[right]; 
    for(int i=left;i<=right-1;i++) 
    { 
     if(array[i] <= pivot) 
     { 
      swap(array[i],array[pI]); 
      pI++; 
     } 
    } 

    swap(array[pI],array[right]); 
    return pI; 
} 

static void swap(int a,int b) 
{ 
    int temp = a; 
    a = b; 
    b = temp; 
} 


public static void main(String args[]) 
{ 
    int[] array = {7,2,1,6,8,5,3,4};//array declared 
    callQuickSort(array,0,7);  
    System.out.println("Sorted array is - "); 
     for(int i=0;i<8;i++) 
      System.out.print(array[i]+"\t"); 
} 

}//end of class 

出力は、上記のコードはそのまま配列を返し

7 2 1 6 8 5 3 4 

あります。アレイが変わっていないのはなぜですか?

+0

デバッガかなり迅速にこの質問に答えるでしょう。ここ

は、コードが機能しています。任意のJava IDEが付属しています。そして、あなたはおそらく[クイックソートの説明](https://en.wikipedia.org/wiki/Quicksort) – Paul

答えて

0

javaデータは、値ではなく参照渡しで渡されるため、スワップメソッドを使用することはできません。

class QuickSort { 


    public static void callQuickSort(int[] array, int left, int right) { 
     if (left < right) { 
      int s = partition(array, left, right); 
      callQuickSort(array, left, s - 1); 
      callQuickSort(array, s + 1, right); 
     } 

    } 

    public static int partition(int[] array, int left, int right) { 
     int pI = left;   //pI = partition index 
     int pivot = array[right]; 
     for (int i = left; i <= right - 1; i++) { 
      if (array[i] <= pivot) { 
       int temp = array[i]; 
       array[i] = array[pI]; 
       array[pI] = temp; 
//    swap(array[i], array[pI]); 
       pI++; 
      } 
     } 

     int temp = array[pI]; 
     array[pI] = array[right]; 
     array[right] = temp; 
//  swap(array[pI], array[right]); 
     return pI; 
    } 

    /*static void swap(int a, int b) { 
     int temp = a; 
     a = b; 
     b = temp; 
    }*/ 


    public static void main(String args[]) { 
     int[] array = {7, 2, 1, 6, 8, 5, 3, 4};//array declared 
     callQuickSort(array, 0, 7); 
     System.out.println("Sorted array is - "); 
     for (int i = 0; i < 8; i++) 
      System.out.print(array[i] + "\t"); 
    } 

}//end of class 
関連する問題