2016-10-24 4 views
1

一般的なクイックソートメソッドを使用してオブジェクトの配列をソートするプログラムを終了しようとしています。私のプログラムはまだ適切にソートされていません。同様のアルゴリズムを使用していましたが、文字列をソートする際には一般的ではありませんでしたので、どこが間違っているのか分かりません。助けてください! は、ここで私が働いてきた、次のクイックソートのコードです:あなたは文字列でのcompareToを使用できるようにarraylist内のオブジェクトで汎用クイックソートメソッドを正しく実行する方法

private static <E> void doQuickSort(ArrayList <E> list, int start, int end) 
{ 
    if(list == null || list.size() == 0) 
     return; 
    if(start >= end) 
     return; 

    int middle = start + (end - start)/2; 
    E pivot = (E) list.get(middle); 

    int s = start, e = end; 
    while (s <= e) 
    { 
     while(pivot.equals(list.get(s))) 
     { 
      s++; 
     } 

     while(pivot.equals(list.get(e))) 
      e--; 


    if(s <= e) 
    { 
     E temp = list.get(s); 
     list.set(s, list.get(e)); 
     list.set(e, temp); 
     s++; 
     e--; 
    } 


    if(start < e) 
     doQuickSort(list, start, e); 
    if(end > s) 
     doQuickSort(list, s, end); 
    } 
} 
+2

EがComparableを拡張しない場合、どのように動作しますか? –

+0

私は実際には使用していませんでしたが、私の以前のプログラムではcompareTo()を文字列に使うときは必要ありませんでした。私の研究ではequals()メソッドがオブジェクトに対して機能すると述べています。このような状況に他の方法はありませんか? p.s.私は非常にこれが奇妙に聞こえる場合はごめんなさい! –

+3

どうすればソートを '等しく(...)'することができますか?何かが大きいか小さいかを知る必要があります。 –

答えて

0

文字列が比較可能です。ジェネリックにすると、ジェネリック要素はComparableでなければならず、コードからはcompareToを使用しないことを指定しませんでした。 compareToの代わりにequalsを使用すると、どの要素が他の要素の前に来るのかを判断することはできません。その結果、あなたは何も並べ替えていません。

+0

それは意味があります、助けてくれてありがとう! –

関連する問題