排序算法類的模板:
public class Example
{
public static void sort(Comparable[] a)
{ /* */ }
#對元素進(jìn)行比較
private static boolean less(Comparable v,Comparable w)
{ return v.compareTo(w)<0 }
# 將元素交換位置
private static void exch(Comparable[] a,int i,int j)
{ Comparable t=a[i];a[i]=a[j];a[j]=t }
#在單行中打印數(shù)組
private static void show(Comparable[] a)
{
for (int i=0;i<a.length;i++)
StdOut.print(a[i] + " ");
StdOut.printIn();
}
#測試數(shù)組元素是否有序
public static boolean isSorted(Comparable[] a)
{for (int i=1; i<a.length;i++)
if (less(a[i],a[i-1])) return false
return true;
}
#從標(biāo)準(zhǔn)輸入讀取字符串,將他們排序并輸出
public static void main(String[] args)
{
String[] a = In.readString();
Sort(a);
assert isSorted(a);
show(a)
}
}
定義一個(gè)可排序的數(shù)據(jù)類型
創(chuàng)建自己的數(shù)據(jù)類型時(shí),我們只要實(shí)現(xiàn)Comparable接口就能保證用例代碼可以將其排序。要做到這點(diǎn),需要實(shí)現(xiàn)一個(gè)compareTo() 方法來定義目標(biāo)類型對象的自然次序
CASE1:
創(chuàng)建一個(gè)可排序的數(shù)據(jù)類型
package rankCore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class dateRank implements Comparable<dateRank> {
private static final Logger logger = LoggerFactory.getLogger(dateRank.class);
private final int day;
private final int month;
private final int year;
public dateRank(int d, int m, int y) {
day = d;
month = m;
year = y;
}
public int getDay() {return day;}
public int getMonth() {return month;}
public int getYear() {return year;}
public int compareTo(dateRank o) {
if (this.year > o.year) { return 1; }
if (this.year < o.year) { return -1; }
if (this.month > o.month) { return 1; }
if (this.month < o.month) { return -1; }
if (this.day > o.day) { return 1; }
if (this.day < o.day) { return -1; }
return 0;
}
@Override
public String toString() {
return month + "/" + day + "/" + year;
}
}
測試用例:
import static java.util.Arrays.sort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rankCore.dateRank;
public class dateRankTest {
private static final Logger logger = LoggerFactory.getLogger(dateRankTest.class);
public static void main(String args[]) {
dateRank[] dateranks = new dateRank[2];
dateranks[0] = new dateRank(15, 4, 1991);
dateranks[1] = new dateRank(05, 4, 1991);
sort(dateranks);
for(int i=0; i<dateranks.length;i++)
//System.out.println(dateranks[i].toString());
logger.info(dateranks[i].toString());
}
}