python 极简的桶排序代码

created by Dejavu


  • 代码

这里的桶排的写法是利用创建一个长度为输入数组array最大值的临时数组book,然后把array中的值逐一代入book的索引,对应的book数组索引下的值就是数字出现的次数,从而返回book中的非零索引即可

def bucket_sort(array):
    if not array:
        return False
    max_len = max(array)+1
    book = [0 for x in range(0,max_len)]
    for i in array:
        book[i] += 1
    return [i for i in range(0,max_len) for j in range(0,book[i])]
  • 改进

缺陷:无法排负数,无法排小数,book所占的空间由输入数组的最大值确定

改进:

  1. 针对存在负数的情况

    # 可对负数排序
    def bucket_sort(array):
        if not array:
            return False
        offset = min(array)
        max_len = max(array) - offset + 1
        book = [0 for x in range(0,max_len)]
        for i in array:
            book[i - offset] += 1
        return [i + offset for i in range(0,max_len) for j in range(0,book[i])]
    
  1. 针对存在小数的情况

    # 可对小数排序
    def bucket_sort(array):
        if not array:
            return False
        # 保留两位小数
        accuracy = 100.
        offset = int(min(array) * accuracy)
        max_len = int(max(array) * accuracy - offset + 1)
        book = [0 for x in range(0,max_len)]
        for i in array:
            book[int(i * accuracy - offset)] += 1
        return [(i + offset) / accuracy for i in range(0,max_len) for j in range(0,book[i])]
    
  1. 利用传统的逐位进行桶排

    这边想到可以在十行内实现的方法实在是太不易读了,如果你有什么清晰的实现代码的话欢迎留言告知

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 某次二面时,面试官问起Js排序问题,吾绞尽脑汁回答了几种,深感算法有很大的问题,所以总计一下! 排序算法说明 (1...
    流浪的先知阅读 1,215评论 0 4
  • 一、 单项选择题(共71题) 对n个元素的序列进行冒泡排序时,最少的比较次数是( )。A. n ...
    貝影阅读 9,264评论 0 10
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,747评论 0 15
  • 短诗大赛 投稿链接 在校和毕业三年内大学生(含大专,本科生,研究生,博士生可投稿,一等奖5000元)
    交大研会君阅读 541评论 0 4
  • *神圣的临在。也就是爱的降临。 *我们自己实际是我们自己最大的充电器,我们得经常回到我们的这个充电器里面得到心神的...
    喜悦松阅读 292评论 0 0