Python笔记 之 桶排序(基于插入排序实现桶排序)

使用Python实现桶排序
基于对插入排序实现桶排序

假定

输入数据均匀,独立地分布在[0,1)区间

运行时间为

算法的期望运行时间:O(n)

伪算法

'''
BUCKET-SORT(A)
    n=A.length
    letB[0..n-1] be a new arrap
    for i =1 to n-1
        make b[i] an empth list
    for i = 1 to n
        insert A[i] into list B[nA[i]]
    for i = 0 to n-1
        sort list B[i] with insertion sort
    concatenate the lists B[0],B[1],...,B[n-1] together in order
'''

Python实现

def bucketSort(A):
    n=len(A)
    #创建数组B不能使用以下形式,否则会将同一个内存地址赋值给数组的每一个元素
    #导致元素的任一个变动,整个数据都会随之变化
    #B=[[]]*n
    B=[]
    for i in range(n):
        B.append([])
    for i in range(n):
        B[int(A[i]*n)].append(A[i])
    for i in range(n):
    #调用插入排序(原址排序)
        insertionSortAsc(B[i])
    C=B[0]
    #合并数组B获取排序好的数组A
    for i in range(1,n):
        C.extend(B[i])
    return C

def insertionSortAsc(A):
    '''原则排序数组A'''
    for j in range(1,len(A)):
        key=A[j]
        i=j-1
        while i>=0 and A[i]>key:
            A[i+1]=A[i]
            i-=1
        A[i+1]=key

运行结果

import numpy
s=list(numpy.random.random(12))
print('排序前:',s)
print('排序后:',bucketSort(s))

排序前: [0.5508770121623574, 0.5105642435981665, 0.7407986153442134, 0.23604037267946876, 0.6047506017482288, 0.8917812667830698, 0.7672095143099116, 0.16869112783967, 0.5530897754416806, 0.9371483508584745, 0.21173144564210788, 0.25923868013393236]

排序后: [0.16869112783967, 0.21173144564210788, 0.23604037267946876, 0.25923868013393236, 0.5105642435981665, 0.5508770121623574, 0.5530897754416806, 0.6047506017482288, 0.7407986153442134, 0.7672095143099116, 0.8917812667830698, 0.9371483508584745]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值