2011-07-28 1 views
0
class test 
{ 
    static int arr[]={1,6,3,4,5,8,11}; 
    static int s=0,temp=0,e=0; 
    public static void main(String [] args)throws Exception 
    { 
    QS(arr,0,arr.length-1); 

    for(int i=0;i<arr.length;i++) 
    System.out.print(arr[i]+" "); 

} 

    public static void QS(int arr[] ,int i,int j)throws Exception 
{ 
int key=i; 
int low=i+1; 
int up=j; 
int temp=0; 
    System.out.println(key); 
while(low<=up) 
{ 
    do{ 
    low++; 
    }while(arr[low]<arr[key]); 

    do{ 
    up--; 
    }while(arr[up]>arr[key]); 

if(low<=up) 
{ 
    temp=arr[up]; 
    arr[up]=arr[low]; 
    arr[low]=temp;    
} 
} 
    System.out.println(low+"++++"+up); 

temp=arr[up]; 
arr[up]=arr[key]; 
arr[key]=temp; 
if(0<up-1)   
     QS(arr,i,up-1); 
if(low< arr.length-2) 
     QS(arr,low,j); 
    } 
    } 

答えて

2

は宿題のように見えるのロジックをしないのです場所を見つけてくださいすることができます正常に動作していない、ここに私のアドバイスです:

分割工程の後、値と一緒にあなたの配列をプリントアウトピボットの位置を確認し、パーティションが正しく行われたことを視覚的に確認します。それが(私がそうであると思われる)場合は、いくつかのprintステートメントを追加するか、デバッガを使用して、プログラムがどこに間違っているかを理解してください。

パーティション分割が機能したら、再帰に移行します。これは比較的簡単です。QSが正しいij(両方の時間)を呼び出していることと、ベースケースが正しく処理されていることを確認するだけです。

+0

私は2時間以来、私は解決策を得ていません – Pramod

1

私はピボットを得ることに問題があると思います。パーティション化のための別の方法を書いて、おそらく同じものを印刷して、正しいピボットを印刷しているかどうかを確認してみてください。 クイックソートについては以下のリンクを参照してください。また、整理されたコードスニペットも提供しています。

+0

私はパーティションの最初の要素としてピボットを取っています、これはクイックソートの1つの変形です。 – Pramod

関連する問題