使用radix sort 基排序对字符串进行排序

news/2024/7/5 5:51:47

这部分的代码实现的操作是,对一个列表里面的字符串按照字母顺序排序,就像字典里面的单词排序一样,举例子如下:

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

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

input是排序之前的Word列表,output是排序之后的Word列表。

整体代码如下所示:

#这里是生成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)

注释基本上都在代码中进行了讲解。


http://www.niftyadmin.cn/n/3657687.html

相关文章

模块分解原理的探索

模块分解原理的探索在软件高层设计中&#xff0c;如何分解模块是首要考虑的问题。目前业界公认模块划分要按照“高内聚&#xff0c;低耦合”的原则来进行&#xff0c;那么如何划分才能满足“高内聚&#xff0c;低耦合”呢&#xff1f;下面来对模块分解原理方面进行一些探索&…

利用radix sort 基排序对数字进行排序,指定基的基排序实现

基排序的概念就不做解释了&#xff0c;要说的一点是基排序中的这个基是可以任意选择的&#xff0c;只不过网上的大部分radix sort代码都是将10作为了基&#xff0c;我的这个代码是可以任意指定基的&#xff0c;代码如下&#xff1a; import random def numerical_radix_sort(n…

模块分解原理与三权分立

模块分解原理与三权分立相关文章链接&#xff1a;模块分解原理探索前一篇模块分解原理探索的文章中谈到了模块需要按专业领域分解&#xff0c;怎么这篇文章的标题上突然冒出了三权分立&#xff0c;软件怎么和政治制度扯到一起去了&#xff1f;表面看这两个东西好像是风牛马不及…

接口关系稳定原理探索

接口关系稳定原理探索相关文章链接&#xff1a; 模块分解原理探索模块分解原理与三权分立接口设计定理 在Robert C.Martin著的《敏捷软件开发&#xff0d;原则、模式与实践》一书中&#xff0c;提出了许多的设计原则&#xff0c;这里想对其中的一条稳定依赖原理&#xff08;中文…

torch.unique()

torch.unique()的功能类似于数学中的集合&#xff0c;就是挑出tensor中的独立不重复元素。 这个方法的参数在官方解释文档中有这么几个:torch.unique(input, sortedTrue, return_inverseFalse, return_countsFalse, dimNone) input: 待处理的tensor sorted&#xff1a;是否对…

Silverlight的 InLine Xaml 功能 - 让您可轻易地动态产生Xaml代码

过去我们一直都是通过.xaml文件中的内容来设计Silverlight中的每一个元素的外观长相&#xff0c;有没有想过&#xff0c;如果需要动态的产生xaml代码&#xff0c;而不想通过.xaml文件来完成的时候该怎么办?  有这种需要吗?有的&#xff0c;而且对于ASP.NET开发人员来说&…

torch.nonzero()

pytorch中的torch.nonzero()&#xff0c;就是返回张量中元素不为0的元素的索引。 举例子如下&#xff1a; import torchx torch.tensor([4,0,1,2,1,2,3]) result 1x print(result)print(result.nonzero()) #输出了不为0值的索引 print(result.nonzero().view(-1))#将结果转…

Keep Walking (转贴去年写的BLOG)

这篇文章&#xff0c;其实是去年12月写的&#xff0c; 换了BLOG&#xff0c;但是舍不得丢掉&#xff0c;所以移过来...从去年&#xff0c;到今年又改变很多了&#xff0c;VS2008又即将推出&#xff0c;时间过得真快...    昨天和一位同样在信息出版界的朋友小聊了一下&…