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;
}
}
しかし、なぜ彼らは明確にプッシュして 'T'参照をポップしたいときに整数をプッシュしポップしていますか? –