2.5 基数排序
核心思惟:起首是低位排序,然后收集;其次是高位排序,然后再收集;依次类推,直到最高位。
Python源代码:
- #-------------------------基数排序--------------------------------
- #肯定排序的次数
- #排序的次序跟序列中最大年夜数的位数相干
- def radix_sort_nums(data_list):
- maxNum = data_list[0]
- #寻找序列中的最大年夜数
- for x in data_list:
- if maxNum < x:
- maxNum = x
- #肯定序列中的最大年夜元素的位数
- times = 0
- while (maxNum > 0):
- maxNum = (int)(maxNum/10)
- times = times+1
- return times
- #找到num大年夜低到高第pos位的数据
- def get_num_pos(num,pos):
- return ((int)(num/(10**(pos-1))))%10
- #基数排序
- def radix_sort(data_list):
- count = 10*[None] #存放各个桶的数据统计个数
- bucket = len(data_list)*[None] #临时存放排序结不雅
- #大年夜低位到高位依次履行轮回
- for pos in range(1,radix_sort_nums(data_list)+1):
- #置空各个桶的数据统计
- for x in range(0,10):
- count[x] = 0
- #统计当前该位(个位,十位,百位....)的元素数量
- for x in range(0,len(data_list)):
- #统计各个桶将要装进去的元素个数
- j = get_num_pos(int(data_list[x]),pos)
- count[j] = count[j]+1
- #count[i]表示第i个桶的右界线索引
- for x in range(1,10):
- count[x] = count[x] + count[x-1]
- #将数据依次装入桶中
- for x in range(len(data_list)-1,-1,-1):
- #求出元素第K位的数字
- j = get_num_pos(data_list[x],pos)
- #放入对应的桶中,count[j]-1是第j个桶的右界线索引
- bucket[count[j]-1] = data_list[x]
- #对应桶的装入数据索引-1
- count[j] = count[j]-1
- # 将已分派好的桶中数据再倒出来,此时已是对应当前位数有序的表
- for x in range(0,len(data_list)):
- data_list[x] = bucket[x]
推荐阅读
Android中内存优化的那些事 - 一个有关图片的优化记录
客服群里叫唤着:这个用户图片不显示了,那个用户图片也不显示了。我拿着手上一切正常的测试机,what the hell……默默地打开bugly。 满园春色关不住,遍地内存溢出来!是的,>>>详细阅读
本文标题:常用排序算法比较与分析
地址:http://www.17bianji.com/lsqh/35003.html
1/2 1