2017-03-10 1 views
1

私が書いているプログラムは、スタック実装を使ってクイックソートクラス内でクイックソートを行う非再帰的な実装を提供することです。私は自分のコードがsort()メソッド内で正しいと感じます。私が抱えている問題は、Comparableインターフェイスを実装するためにStackを初期化することです。私のメソッドが "Comparableを継承している"ときStackにはこの状況ではEが間違ったパラメータなので、スタックにはどのようなパラメータを設定すべきですか?スタックを実装する方法<E> with <T extends comparable <T>>?

package edu.csus.csc130.spring2017.assignment2; 
    import java.util.Stack; 
    public class QuickSort{ 

     // provide non-recursive version of quick sort 
     // hint: use stack to stored intermediate results 
     // java.util.Stack can be used as stack implementation 
     public static <T extends Comparable<T>> void sort(T[] a) { 
      Stack<E> stack = new Stack<E>(); //something wrong will <E> i think 
      stack.push(0); 
      stack.push(a.length); 
      while (!stack.isEmpty()) { 
       int hi = (int) stack.pop(); 
       int lo = (int) stack.pop(); 
       if (lo < hi) { 
       // everything seems good up til here 
       int p = partition(a, lo, hi); 
       stack.push(lo); 
       stack.push(p - 1); 
       stack.push(p + 1); 
       stack.push(hi); 

       } 
      }   
      throw new UnsupportedOperationException(); 
     } 

     // Partition into a[lo..j-1], a[j], a[j+1..hi] 
     private static <T extends Comparable<T>> int partition(T[] a, int lo, int hi) { 
      int i = lo, j = hi + 1; // left and right scan indices 
      T v = a[lo]; // the pivot 

      while (true) { // Scan right, scan left, check for scan complete, and exchange 
       while (SortUtils.isLessThan(a[++i], v)) {//++i is evaluated to i+1 
        if (i == hi) { 
         break; 
        } 
       } 
       while (SortUtils.isLessThan(v, a[--j])) {//--j is evaluated to j-1 
        if (j == lo) { 
         break; 
        } 
       } 
       if (i >= j) { 
        break; 
       } 

       SortUtils.swap(a, i, j); 
      } 

      SortUtils.swap(a, lo, j); // Put v = a[j] into position 
      return j; 
     } 

    } 

答えて

0

あなたのTタイプとは関係ないとの整数をプッシュとポップしようとしているので、あなたはおそらくStack<Integer>を使用します。

+0

しかし、なぜ彼らは明確にプッシュして 'T'参照をポップしたいときに整数をプッシュしポップしていますか? –

関連する問題