字符串按字母顺序排序的数字基础是什么?

时间:2016-07-26 00:53:00

标签: sorting

如果我有名字“johnny”和“bobby”,我该如何使用电脑对它们进行排序?

如果我在数字上将它们相互比较,它似乎并不适用于所有条件。

考虑:

def listsum(numList):
    theSum = 0
    for i in numList:
        theSum = theSum + i
    return theSum

test = 0
mystr='BA'
for code in map(ord, mystr):
    test = test + listsum([code])
    print(test)

131

然后改变,

mystr='AZ'

得到155。

所以,我不能只进行ASCII比较。那么如果我手动做什么我会用什么呢?我不想使用任何特定语言或任何内置的排序方法。

1 个答案:

答案 0 :(得分:2)

比较第一个字符。如果其中一个在编码顺序中早于另一个,则字符串早于另一个 - 反之亦然。如果它们相同,请继续执行下一个字符并执行相同操作。如果到达两个字符串的末尾,则字符串相等。如果到达一个字符串的末尾,则该字符串更早。

求和与词典排序无关。

作为一个例子,这里有一个明确但不是最佳的上述实现:

def str_cmp(a, b):
    la = len(a)
    lb = len(b)

    if la == 0 and lb == 0:
        return 0    # two empty strings are equal
    if la == 0:
        return -1   # an empty string is earlier than a non-empty one
    if lb == 0:
        return 1    # a non-empty string is later than an empty one

    oa = ord(a[0])
    ob = ord(b[0])

    if oa < ob:
        return -1   # a string whose initial character is earlier is earlier
    if oa > ob:
        return 1    # a string whose initial character is later is later

    return str_cmp(a[1:], b[1:])   # strings with same initial characters compare
                                   # the same as the strings with those characters
                                   # chopped off

如果您愿意,可以将此功能用作cmpsort的{​​{1}}参数。