使用字母表字符串对列表进行排序

时间:2014-12-09 20:25:12

标签: python list sorting

我尝试使用字符串

对仅包含小写字母的列表进行排序
alphabet = "abcdefghijklmnopqrstuvwxyz". 

没有使用sort,只有O(n)复杂度。 我来到这里:

def sort_char_list(lst):
alphabet = "abcdefghijklmnopqrstuvwxyz"
new_list = []
length = len(lst)

for i in range(length):
    new_list.insert(alphabet.index(lst[i]),lst[i])
    print (new_list)

return new_list

输入:

m = list("emabrgtjh")

我明白了:

['e']
['e', 'm']
['a', 'e', 'm']
['a', 'b', 'e', 'm']
['a', 'b', 'e', 'm', 'r']
['a', 'b', 'e', 'm', 'r', 'g']
['a', 'b', 'e', 'm', 'r', 'g', 't']
['a', 'b', 'e', 'm', 'r', 'g', 't', 'j']
['a', 'b', 'e', 'm', 'r', 'g', 't', 'h', 'j']
['a', 'b', 'e', 'm', 'r', 'g', 't', 'h', 'j']

在整个过程中看起来出了问题,我似乎无法理解为什么......如果有人可以请我启发,那会很棒。

1 个答案:

答案 0 :(得分:3)

您正在寻找一个桶排序。这里:

def sort_char_list(lst):
    alphabet = "abcdefghijklmnopqrstuvwxyz"
    # Here, create the 26 buckets
    new_list = [''] * len(alphabet)

    for letter in lst:
        # This is the bucket index
        # You could use `ord(letter) - ord('a')` in this specific case, but it is not mandatory
        index = alphabet.index(letter)
        new_list[index] += letter

    # Assemble the buckets
    return ''.join(new_list)

至于复杂性,由于alphabet是预定义的固定大小字符串,因此在其中搜索一个字母最多需要26次操作,这些操作符合O(1)的条件。因此,整体复杂性为O(n)