该算法思路与高为优先的字符串排序算法几乎相同,只是对高位优先的字符串排序算法做了小小的改进。
思路:根据键的首字母进行三向切分,然后递归地将三个子数组进行排序。
三向字符串快速排序实现并不困难,只需对三向快排代码做些修改即可:
代码中的charAt(String[] a,int d)方法是获取下标d处的字符,exch()是交换函数。
public class Quick3string {
private static int charAt(String s, int d) {
if(d<s.length())return s.charAt(d);
else return -1;
}
public static void sort(String[] a) { sort(a,0,a.length-1,0); }
public static void sort(String[] a,int lo, int hi, int d) {
if(hi<=lo) return;
int lt = lo, gt = hi;
int v = charAt(a[lo], d);
int i = lo+1;
while(i<=gt) {
int t = charAt(a[lo],d);
if(t<v) exch(a,lt++,i++);
else if(t>v) exch(a,i,gt--);
else i++;
}
sort(a,lo,lt-1,d);
if(v>=0) sort(a,lt,gt,d+1);
sort(a,gt+1,hi,d);
}
}
相对于高位优先字符串算法的优点: