[算法4]将排序程序改成泛型模式
在第二章排序的部分,Comparable会导致vscode提示warning。
我们可以将其改成泛型类型,以消除warning。
例如:
package study.algs.main.ch02;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class Insertion {
public static <T extends Comparable<? super T>> void sort(T[] a) {
int N = a.length;
// 将a[]按升序排列
for (int i = 1; i < N; i++) {
// 将a[i]插入到a[i-1], a[i-2], a[i-3] ... 之中
for (int j = i; j > 0 && less(a[j], a[j - 1]); j--)
exch(a, j, j - 1);
}
}
private static <T extends Comparable<? super T>> boolean less(T v, T w) {
return v.compareTo(w) < 0;
}
public static <T extends Comparable<? super T>> void exch(T[] a, int i, int j) {
T t = a[i];
a[i] = a[j];
a[j] = t;
}
public static <T extends Comparable<? super T>> void show(T[] a) {
for (T t : a)
StdOut.print(t + " ");
StdOut.println();
}
public static <T extends Comparable<? super T>> boolean isSorted(T[] a) {
for (int i = 1; i < a.length; i++)
if (less(a[i], a[i - 1]))
return false;
return true;
}
public static void main(String[] args) {
String[] a = StdIn.readAllStrings();
sort(a);
assert isSorted(a);
show(a);
}
}
看着舒服多了 _