前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串排序----三向字符串快速排序

字符串排序----三向字符串快速排序

作者头像
SuperHeroes
发布2018-05-30 18:01:48
1.6K0
发布2018-05-30 18:01:48
举报
文章被收录于专栏:云霄雨霁云霄雨霁

上一篇:高位优先的字符串排序

该算法思路与高为优先的字符串排序算法几乎相同,只是对高位优先的字符串排序算法做了小小的改进。

思路:根据键的首字母进行三向切分,然后递归地将三个子数组进行排序。

三向字符串快速排序实现并不困难,只需对三向快排代码做些修改即可:

代码中的charAt(String[] a,int d)方法是获取下标d处的字符,exch()是交换函数。

代码语言:javascript
复制
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);
    }
}

相对于高位优先字符串算法的优点

  1. 高位优先字符串算法可能会创建许多的空数组(前缀相同的情况下),但本算法总是只有三个;
  2. 本算法不需要额外的空间。
  3. 要将含有N个字符串的数组排序,三向字符串快速排序需要比较字符~NlnN次。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档