字符串排序思路,或者叫做两个字符串比较大小

  • Post author:
  • Post category:其他


字符串对象本质上是字符数组。字符串的排序归结为其对应的字符数组的排序(不是数组内部排序,而是数组之间的比较和排序)。

而字符都有对应的码值,单就英文字母a~z来说,各个字母对应码值相对是升序的,即a的码值小于b的码值,依次往后增大。因为每个字符都有一一对应且唯一的码值,这就为比较乃至排序提供了基础。

可按如下思路对两个字符串排序。

1.如两串对应的字符数组长度相等,从数组下标为0开始开始比较码值,如果相等,下标加一,继续向后比较,直到出现码值不等时,结束比较。若是升序,则(码值较小的字符→所在的字符数组→此数组对应的字符串)排在前面,另外一个排在后面;降序则反之。

如abd, abc升序排序后为abc, abd。

2.若字符串对应长度不相等,则取两串中较小的长度作为比较的最大轮次,此时比较和情况1一样。若比完最大轮次对应数组相同下标对应的码值都相同,则串长的排在后面(假如升序)。

如abcdefg, abcd按升序排序后为abcd, abcdefg。

以下代码是java.lang.String的compareTo方法源码:

  public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }



版权声明:本文为qq_44922239原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。