기수 정렬 기준 정렬을 사용하여 문자열 정렬

이 코드 부분의 작업은 사전에서 단어를 정렬하는 것처럼 목록의 문자열을 알파벳순으로 정렬하는 것입니다. 예는 다음과 같습니다.

input = ['jkttsszzo', 'zie', 'iukddrjdba', 'bwjahzwiv', 'yslzvnjdjg', 'xkm', 'aszcnljjl', 'syniimbq', 'hqgyd', 'itvis']

output = ['aszcnljjl', 'bwjahzwiv', 'hqgyd', 'itvis', 'iukddrjdba', 'jkttsszzo', 'syniimbq', 'xkm', 'yslzvnjdjg', 'zie']

입력은 정렬 전 단어 목록이고 출력은 정렬 후 단어 목록입니다.

전체 코드는 다음과 같습니다.

#这里是生成26个小写字母的程序
char_list = [chr(x) for x in range(97,123)]  
print(char_list)

word_list=[]# 利用程序自动生成一个Word列表,开始设置为空
for i in range(10): # 定义生成的word的数量
    word = ''
    length = random.randint(3,10)  # 每个生成的Word包含的字符的数量是3到10之间的随机数,这个可以任意设定
    for j in range(length ):
        word = word + chr( random.randint(97,122) )
    word_list.append(word)

print(word_list)

def sort_word_list(word_list):
    max_length = len(word_list[0])
    for i in range(1,len(word_list)):#获得这个列表中最长的字符串的长度
        if len(word_list[i]) > max_length:
            max_length = len( word_list[i] )
    print(max_length)

    for i in range(max_length):

        bucket = {}
        for x in char_list:
            bucket[x] = []


        for x in word_list:
            if len(x)<max_length: # 如果某个word的长度小于最长的字符串的长度,那么就在结尾处增加'z'补足长度 ,比如apple 变为 applezzzzz
                temp_word = x + "z"*(max_length - len( x ))
            else:
                temp_word = x
            bucket[temp_word[max_length - i - 1]].append(x)

        index = 0
        for k in char_list:
            if (len(bucket[k])) != 0:
                for y in bucket[k]:
                    word_list[index] = y
                    index = index + 1

    print(word_list)


sort_word_list(word_list)

주석은 기본적으로 코드에 설명되어 있습니다.

추천

출처blog.csdn.net/t20134297/article/details/108149879