基数排序

基数排序 · 浏览次数 : 2

小编点评

**博客地址:** https://www.cnblogs.com/zylyehuo/# -*- coding: utf-8 -*-# O(n) O(kn)# NB O(nlogn) **算法介绍:** 算法的目的是对一个数字列表进行降序排序。降序排序是指将数字列表中数字按从小到大排序。 **步骤:** 1. **找出最大值:** 算法首先找到输入列表中的最大值作为排序标准。 2. **初始化桶存储器:** 创建一个大小为 10 的数组,其中每个元素代表一个桶,用于存储和分组数字。 3. **将数字分配到桶中:** 遍历输入列表,对每个数字计算其十进制值。将该值与桶对应的位置插入相应的桶中。 4. **合并桶:** 将所有桶中的数字合并回输入列表中。 5. **重新排序列表:** 最后,将输入列表重新排序以实现降序排序。 **时间复杂度:** * 时间复杂度为 O(n),其中 n 是输入列表的大小。这是因为算法中循环遍历输入列表,并为每个数字找到其桶位置。 * 时间复杂度为 O(kn),其中 k 是桶的大小。这是因为算法中创建和初始化桶需要 O(k) 的时间。 **其他说明:** * 算法使用了 bucket sort 的思想,该是一种将数字分组并排序的技术。 * 每个桶可以存储最多 10 个数字。 * 算法使用随机排序算法对输入列表进行排序。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

# -*- coding: utf-8 -*-

# O(n) O(kn)
# NB O(nlogn)
import random


def radix_sort(li):
    max_num = max(li)  # 最大值 9->1, 99->2, 888->3, 10000->5
    it = 0
    while 10 ** it <= max_num:
        buckets = [[] for _ in range(10)]
        for var in li:
            # 987 it=1  987//10->98 98%10->8;    it=2  987//100->9 9%10=9
            digit = (var // 10 ** it) % 10
            buckets[digit].append(var)
        # 分桶完成
        li.clear()
        for buc in buckets:
            li.extend(buc)
        # 把数重新写回li
        it += 1


li = [random.randint(0, 10) for _ in range(10)]
random.shuffle(li)
print(li)

radix_sort(li)
print(li)

与基数排序相似的内容:

基数排序

博客地址:https://www.cnblogs.com/zylyehuo/ # -*- coding: utf-8 -*- # O(n) O(kn) # NB O(nlogn) import random def radix_sort(li): max_num = max(li) # 最大值 9-

基于桶的排序之基数排序以及排序方法总结

# 基于桶的排序之基数排序以及排序方法总结 作者:[Grey](https://www.cnblogs.com/greyzeng/) 原文地址: [博客园:基于桶的排序之基数排序以及排序方法总结](https://www.cnblogs.com/greyzeng/p/16929142.html) [

常见排序算法(汇总)

博客地址:https://www.cnblogs.com/zylyehuo/ 希尔排序:时间复杂度与选取的gap序列有关 计数排序: 时间复杂度:O(n) 桶排序: 时间复杂度:O(n+k) 最坏时间复杂度:O(n²k) 空间复杂度:O(nk) 基数排序: 时间复杂度:O(kn) 空间复杂度:O(k

高基数类别特征预处理:平均数编码

本文介绍了一种对高基数类别特征非常有效的编码方式:平均数编码。详细的讲述了该种编码方式的原理,在实际工程应用中有效避免过拟合的方法,并且提供了一个直接上手的代码版本。

Prometheus性能调优-什么是高基数问题以及如何解决?

背景 近期发现自己实验用的 Prometheus 性能出现瓶颈, 经常会出现如下告警: PrometheusMissingRuleEvaluations PrometheusRuleFailures 之后慢慢排查发现是由于 Prometheus 的某些 series 的高基数(High Cardin

Redis系列10:HyperLogLog实现海量数据基数统计

Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型 追求性能极致:客户端缓

Prometheus 性能调优-水平分片

简介 之前笔者有连续 2 篇文章: Prometheus 性能调优 - 什么是高基数问题以及如何解决? 如何精简 Prometheus 的指标和存储占用 陆续介绍了一些 Prometheus 的性能调优技巧,包括高基数问题的解决以及精简 Prometheus 的指标和存储占用。 今天再介绍一个新的调

给博客园的寄语

39岁大龄C#开发程序员,今天看到了博客园的求救信,内心不禁一阵触动,故而写下这一篇文章,以此来缅怀我和博客园一起走过的青春。 博客园虽然之前也发过几次求救了,但当时都觉得不至于吧,因为想着坚持这么多年用户基数不小的网站,再怎样维持生存应该不难吧。但这次看到了博客园团队为了运营不惜在借贷维持,我才觉

[转帖]全球共有多少MySQL实例在运行?这里有一份数据

https://www.cnblogs.com/zhoujinyi/p/16377269.html 摘要 Shadowserver Foundation在5月31日发布了一份全网的MySQL扫描报告,共发现了暴露在公网的360万个MySQL实例。因为这份报告基数够大,而且信息也非常完整,从数据库专业