我尝试使用字符串
对仅包含小写字母的列表进行排序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']
在整个过程中看起来出了问题,我似乎无法理解为什么......如果有人可以请我启发,那会很棒。
答案 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)