zoukankan      html  css  js  c++  java
  • 排序算法之桶排序

    一、原理

    桶排序是计数排序的升级版,如果计数排序中数的范围比较大呢?之前的计数排序数字范围是1-200,假如1-20000呢?利用桶排序就可以对其进行优化。

    步骤:

    (1)将元素分在不同的桶中

    (2)在对每一个桶中的元素进行排序

    桶排序的的快慢取决于数据的分布:

    • 当输入的数据可以均匀的分配到每一个桶中,排序最快
    • 当输入的数据被分配到了同一个桶中,排序最慢

    关键点:

    • 每一个桶中有多少个数
    • 每一个数应该放到哪一个桶中

    二、实现

    def binSort(li,min_num,max_num,bin_num=10):
        bin=[[] for i in range(bin_num)]#[ [],[],[],...  ]
    
        for num in li:
            n=(max_num-min_num+1)/bin_num #表示多少个数在一个桶里
            bin[int(num // n)].append(num) #对应的数字放在对应的桶里
    
            #维护桶有序,每一个桶使用插入排序,注意这是对每一个桶中的数进行排序
            i=len(bin[int(num // n)])-1 #i表示桶中的最后一个数
            tmp=bin[int(num // n)][i]
            j=i-1
            while j>=0 and tmp<bin[int(num // n)][j]:
                bin[int(num // n)][j+1]=bin[int(num//n)][j]
                j=j-1
            bin[int(num // n)][j+1]=tmp
      
      #对每一个桶中的数进行合并,返回已经排序好的序列 res
    =[] for l in bin: res.extend(l) return res import random li=[random.randint(0,600) for i in range(10000)] print(binSort(li,0,600))
  • 相关阅读:
    Vulnhub_DC4 记录
    文件上传(解析)漏洞
    开源情报搜集
    Vulnhub_DC3 记录
    “恶意”利用IPC$
    Vulnhub_DC2 记录
    Vulnhub_DC1 记录
    合天网安实验室 渗透测试项目二
    合天网安实验室 渗透测试项目一
    编程如写作
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11109345.html
Copyright © 2011-2022 走看看