zoukankan      html  css  js  c++  java
  • python 基数 计数 排序

    #!/usr/bin/python
    # 基数排序
    # 将列表中的数按照基数进行排序 先排序个位的数 在排序十位的 依次类推可以
    def radix_sort(li):
    	max_mun = max(li) #确定列表中最大的值
    	it = 0
    	while 10 ** it <= max_mun: #按照最大的数的位数进行循环 10 ** it 当it = 1时 10 ** it 表示次方 10的1次方
    		buckets = [[] for _ in range(10)] #生成10个桶(列表)
    		for var in li:
    			digit = (var // 10 ** it) % 10 # 将列表中的数进行分桶 进行数的除法和取余可以获得数值的个位数
    			buckets[digit].append(var)
    		
    		li.clear() #清空列表 
    		
    		for buc in buckets: 
    			li.extend(buc) # 将数放回到原来列表
    		   	   
    		it += 1
    
    
    ————————————————————
    #!/usr/bin/python
    # 计数排序
    # 对列表进行排序,已知列表中的值的数都在0-100之间
    def count_sort(li,max = 100):
    	count_list = [0 for _ in range(max+1)] #生成一个0到100的长度的列表 用来存放原来列表的值
    	for val in range(li): #循环原来列表,将新列表中的相同的数值进行加1 
    		count_list[val] += 1
    
    	li.clear() # 清空原来列表 不使用新的内存 节省空间
    
    	for ind,val in enumerate(count_list): # 循环新的列表。取出值和下标
    		for i in range(val): #循环每个数出现的次数
    			li.append(ind) # 将出现的数放进列表 
    
    #时间复杂度为 O(n) 但是存在使用条件 , 和列表中的数值范围相关
    
    
    
  • 相关阅读:
    docker安装
    [golang grpc] 框架介绍
    docker介绍
    Visual Studio Code常用设置
    eclipse常用设置
    [golang note] 网络编程
    [golang note] 工程组织
    [golang note] 协程通信
    [golang note] 协程基础
    [golang note] 接口使用
  • 原文地址:https://www.cnblogs.com/ikai/p/11636366.html
Copyright © 2011-2022 走看看