排序算法之桶排序

作者: 盗梦者_56f2 | 来源:发表于2018-11-27 14:51 被阅读9次

介绍

桶排序是一个排序算法,工作的原理是将数组中的元素分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法,或是以递归方式继续使用桶排序进行排序)。

复杂度:

最坏时间复杂度:O(n^2)
平均时间复杂度:O(n + k)
最坏空间复杂度:O(n * k)

步骤

桶排序以下列程序进行:

  • 设置一个定量的数组当作空桶子。
  • 寻访序列,并且把项目一个一个放到对应的桶子去。
  • 对每个不是空的桶子进行排序。
  • 从不是空的桶子里把项目再放回原来的序列中。

python

def indexFor(a, min, step):
    return (a - min) // step

def bucket_sort(lst):
    # 查找lst中的最小值和最大值
    max, min = lst[0], lst[0]
    for i in lst:
        if i > max:
            max = i
        if i < min:
            min = i
    # 定义一个桶数
    bucketNum = max // 2 - min // 2 + 1
    # 创建bucketNum个空桶
    buckList = []
    for i in range(bucketNum):
        buckList.append([])
    # 根据定义把lst中的元素放进不同的桶中, 前一个桶中的所有元素都小于后一个桶中的所有元素
    for i in lst:
        index = indexFor(i, min, 2)
        buckList[index].append(i)
    index = 0
    for bucket in buckList:
        bucket = insert_sort(bucket)
        for j in bucket:
            lst[index] = j
            index += 1
    return lst

# 桶内的元素进行插入排序
def insert_sort(bucket):
    if len(bucket) <= 1:
        return bucket
    else:
        for i in range(1, len(bucket)):
            key = bucket[i]
            j = i - 1
            while j >= 0:
                if bucket[j] > key:
                    bucket[j + 1] = bucket[j]
                    bucket[j] = key
                j -= 1
        return bucket

lst = [3, 5 ,2, 6, 8, 1, 9, 7]
print(bucket_sort(lst))

相关文章

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 排序算法(十一)桶排序

    排序算法(十一)桶排序   桶排序(Bucket sort)是计数排序改进版,同样属于非比较排序,该算法的基本思想...

  • 排序算法三(桶,计数,基数)

    桶排序,计数排序,基数排序算法的时间复杂度都是线性的,所以把这类排序算法叫作线性排序。 桶排序 概念:将要排序的数...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • noip普及组3:排序算法

    排序算法 ①冒泡排序:O() ②插入排序:O() ③选择排序:O() ④桶排序 ⑤sort排序

  • 排序算法概述

    十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序、希尔排序、计数排序,基数排序,桶排序 算法...

  • 十大排序算法

    算法说明 十大排序算法分别是:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序...

  • 桶排序与哈希桶排序

    一.桶排序 算法原理 桶排序 (箱排序)的原理是将待排序序列分到有限数量的桶里面,然后对每个桶再分别排序(可以使用...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

网友评论

    本文标题:排序算法之桶排序

    本文链接:https://www.haomeiwen.com/subject/wjmgqqtx.html