#!/usr/bin/env python
# coding:utf-8
'''
桶排序对于相同对象特别多的列表速度特别快。但是遗憾的是需要排序的对象必须是已知的数值。
桶排序可以应用在排列考试成绩等等的场景里面(因为数千人、数万人的成绩只有数百个,拥有同一成绩的人特别多)。
'''
import random
def bucketSort(lst):
buckets = [0] * ((max(lst) - min(lst))+1)
for i in range(len(lst)):
#桶的序号i本质是原数列中相应的数值与数列最小值的差值,故i+min(lst)表示原数列中相应的数值
#lst[i]-min(lst)=i
buckets[lst[i]-min(lst)] += 1
res=[]
for i in range(len(buckets)):
if buckets[i] != 0:
#桶的序号i本质是原数列中相应的数值与数列最小值的差值,故i+min(lst)表示原数列中相应的数值
#lst[i]-min(lst)=i
res += [i+min(lst)]*buckets[i]
return res
nums = [random.randint(-50,100) for i in xrange(20)]
print nums
print bucketSort(nums)
Python 桶排序
最新推荐文章于 2025-03-09 16:46:06 发布