介绍
这篇文章将为大家详细讲解有关如何使用python实现计数排序与桶排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>计数排序强>
- <李>
找到给定序列的最小值与最大值
李> <李>创建一个长度为最大值——最小值+ 1的数组,初始化都为0
李> <李>然后遍历原序列,并为数组中索引为当前值-最小值的值+ 1
李> <李>此时数组中已经记录好每个值的数量,自然也就是有序的了
李>例如:
<强>计数排序实现强>
下面为列表的计数排序
def count_sort (s): “““才能计数排序“““ #,才能找到最大最小值 min_num 才能=,最小值(s) max_num 才能=,马克斯(s) #,才能计数列表 时间=count_list 才能;[0]* (max_num-min_num + 1) #,才能计数 for 才能小姐:拷贝: ,,,count_list (i-min_num), +=1 s.clear才能() #,才能填回 for 才能,印第安纳州小姐:拷贝列举(count_list): ,,,while 小姐:!=,0: ,,,,,s.append(印第安纳州+ min_num) ,,,,,小姐:-=1 if __name__ ==, & # 39; __main__ # 39;: a 才能=,(3、6、8、4、2、6、7、3] count_sort才能(a) 打印才能(a)
计数排序的缺点
当数值中有非整数时,计数数组的索引无法分配
<强>桶排序强>
<强>桶排序原理:强>
- <李>
桶排序与计数排序类似,但可以解决非整数的排序
李> <李>桶排序相当于把计数数组划分为按顺序的几个部分
李> <李>每一部分叫做一个桶,它来存放处于该范围内的数
李> <李>然后再对每个桶内部进行排序,可以使用其他排序方法如快速排序
李> <李>最后整个桶数组就是排列好的数据,再将其返回给原序列
李>举例:
<强>桶排序实现强>
这里选择桶的数量为序列元素个数+ 1,范围分别等是5分与最大值,和上面那个图一样。
具体问题应该按照具体情况进行桶划分
这里桶内部排序直接调用了排序
def bucket_sort (s): “““才能桶排序“““ min_num 才能=,最小值(s) max_num 才能=,马克斯(s) #才能,桶的大小 bucket_range 才能=,(max_num-min_num),/, len (s) #才能,桶数组 count_list 才能=,[[]大敌;for 小姐:拷贝范围(len (s), +, - 1)) #,才能向桶数组填数 for 才能小姐:拷贝: ,,,count_list [int ((i-min_num)//bucket_range)] .append(我) s.clear才能() #,才能回填,这里桶内部排序直接调用了排序 for 才能小姐:拷贝count_list: ,,,for j 拷贝排序(我): ,,,,,s.append (j) if __name__ ==, & # 39; __main__ # 39;: a 才能=,(3.2、6、8、4、2、6、7、3] bucket_sort才能(a), 打印(a),才能#,[3.2,2,,3,,4,6,6,7,8)
关于“如何使用python实现计数排序与桶排序”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。