zoukankan      html  css  js  c++  java
  • 桶排序(使用Python实现)

    桶排序

      

    此算法特性

    此算法适用场景




    代码实现

    # 桶排序可以看成是基数排序的升级版,计数排序的一个单位是一个数,而桶排序的一个单位是一个区间
    
    def bucktetSort(numList,bucketNum):
        import math
        if len(numList) <=0:
            return numList
    
        maxNum = max(numList)
        minNum = min(numList)
    
        bucketLength = len(numList)-1
        bucketSize = ((maxNum - minNum) / bucketLength)  # 根据桶的数量找到每个桶的取值范围
        buckets = [[] for i in range(bucketLength)]
    
    
        for i in range(len(numList)):     # 将各个数分配到各个桶
            # num_bucktes_local界定范围.只要大于第n个桶,就是在第n+1个桶里.所以是向上取整.
            #比如说 numList = [1,40,50,60,200]. 
            num_bucktes_local =math.ceil((numList[i] - minNum) / bucketSize)-1
            if num_bucktes_local<=0: # 最小值是 == -1 的.
                num_bucktes_local = 0
            buckets[num_bucktes_local].append(numList[i])
    
        # ---可删除---
        print('桶的取值范围是:',bucketSize)
        print('每个桶的藏的宝贝都是:',buckets)
        # ---可删除---
    
    
        for i in range(bucketLength):# 桶内排序,可以使用各种排序方法
            buckets[i].sort()
            
        res = []
        for i in range(len(buckets)):# 分别将各个桶内的数提出来,压入结果
            res.extend(buckets[i])
        return res
    
    # ---测试数据---
    import unittest
    class TestData(unittest.TestCase):
        def test_one(self):
            numlist = [1,50.76,75,150,200,321,321,32,992]
            print(bucktetSort(numlist,5),'
    '*2)
        def test_two(self):
            numlist = [-13,321,43,6,9,99,12]
            print(bucktetSort(numlist,5),'
    '*2)
        def test_three(self):
            numlist = [1,50.76,12,321,54,787,43]
            print(bucktetSort(numlist,5),'
    '*2)
    # ---测试数据结束---
    
    if __name__ == "__main__":
        unittest.main() # 调用测试数据
    

    参考

  • 相关阅读:
    守护进程(Daemon)
    Socket select的用法
    被误解的C++——磨刀不误砍柴工
    C++ 虚函数表解析
    进程间通信IPC
    pthread_join函数及linux线程
    详细讲解C++ 类的继承
    Trilogy公司的笔试题
    linux下fork的使用
    Ruby 编程规范
  • 原文地址:https://www.cnblogs.com/gtscool/p/12550763.html
Copyright © 2011-2022 走看看