备战蓝桥杯Day23-桶排序

桶排序

在计数排序的基础上,如果元素的范围较大(比如在1-1亿之间),如何改造算法?

那么就引出桶排序(Bucket Sort):首先将数据分为不同的桶,再把元素放到相应的桶中,再对桶中的元素进行排序。

排序思路

  1. 分桶: 将待排序数据根据某种规则分配到不同的桶中。可以根据数值范围、数据的某个特征等来确定分桶规则。

  2. 桶内排序: 对每个桶内的数据进行排序。可以使用任何适合的排序算法,通常是插入排序或者快速排序。

  3. 合并: 将所有桶的结果按顺序合并,即可得到最终有序序列。

代码实现 

def bucket_sort(li, n=100, max_num=10000):buckets = [[] for _ in range(n)]for var in li:i = min(var//(max_num//n), n-1)  # 下面有详细注释buckets[i].append(var)  # 把var放到桶里# 保持桶内的顺序for j in range(len(buckets[i])-1, 0, -1):if buckets[i][j] < buckets[i][j-1]:buckets[i][j], buckets[i][j-1] = buckets[i][j-1], buckets[i][j]else:break# 新建一个列表,把数据放进去sorted_li = []for buc in buckets:sorted_li.extend(buc)return sorted_li# 测试案例
import random
li = [random.randint(0,10000) for i in range(1, 1000000)]
li = bucket_sort(li)
print(li)

 一些注释

 i = min(var//(max_num//n), n-1)

n:有几个桶

max_num:数据元素的总个数

max_num // n:每个桶里有几个数

var // (max_num // n):把循环遍历到的数var应该放到哪个桶里

min(var // (max_num // n))遍历到最后一个数时,桶会出现越界的情况,为了避免这种情况,我们总是与n-1比较并取最小值,这样不会出现越界的情况。

数据非常大跑代码会有点慢,耐心等待一下~

运行结果

只截取了开头结尾,数据太多了没截全。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509347.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http模块学习

http模块 客户端&#xff1a;负责消费资源的电脑 服务器&#xff1a;负责对外提供网络资源的电脑&#xff0c;与普通电脑的区别就在于服务器上 安装了web服务器软件。 http模块是Node.js官方提供用来 创建web服务器的模块&#xff0c;通过http模块提供的http.createServer()方…

FL Studio21.3中文官方汉化版安装包补丁包下载

关于FL Studio 21的教程或视频链接&#xff0c;您可以在各大视频平台或官方网站上寻找。由于我无法直接提供链接&#xff0c;我建议您在搜索引擎中输入“FL Studio 21教程”或“FL Studio 21视频教程”等关键词&#xff0c;就能找到大量的相关教学资源和视频链接。这些教程通常…

SDRPI烧写教程

首先准备好需要烧写的文件&#xff0c;一共有两个 .BIN 和 .elf文件 这里提供测试文件链接&#xff1a;https://pan.baidu.com/s/1P2cjCqOCyJg7hRhbqWue9Q 提取码&#xff1a;49jp 把SDRPI设置为JTAG模式 插上电源和JTAG线&#xff0c;这块板子的电源和UART使用的是同一个接…

pytorch标准化与模型训练推理以及中间层注意点

1.图像归一化和通道转换操作 a np.arange(3*3*3).reshape(3,3,3).astype(np.uint8) print(a) function transforms.ToTensor()#注意只能转换3维度的ndarray或者PIL的Image类型 c function(a) print(c) D:\anaconda3\python.exe E:\test\pythonProject\test.py [[[ 0 1 2…

【李沐论文精读】Resnet精读

论文地址&#xff1a;Deep Residual Learning for Image Recognition 参考&#xff1a;撑起计算机视觉半边天的ResNet【论文精读】、ResNet论文逐段精读【论文精读】、【李沐论文精读系列】 一、导论 深度神经网络的优点&#xff1a;可以加很多层把网络变得特别深&#xff0c;…

使用postman测试若依登录接口API-2

请求方式 由于登录控制器可知&#xff1a;该请求方式为Post请求 请求地址 在请求路径栏输入请求地址&#xff0c;如下图所示&#xff1a; 参数体 在Body键入所需参数&#xff0c;类型选择raw,数据格式选择"JSON"&#xff1a;如下图所示&#xff1a; 认证成功与失败…

Linux客户端开发

1 创建socket,返回一个文件描述符cfd---socket(); 2 连接服务端---connect&#xff08;&#xff09;&#xff1b; 3 while&#xff08;1&#xff09; { //发送数据 write //接收数据 read } 4 close(cfd); #include<stdio.h> #include<stdlib.h> #include&…

leetcode 长度最小的子数组

在本题中&#xff0c;我们可以知道&#xff0c;是要求数组中组成和为target的最小子数组的长度。所以&#xff0c;我们肯定可以想到用两层for循环进行遍历&#xff0c;然后枚举所有的结果进行挑选&#xff0c;但这样时间复杂度过高。 我们可以采用滑动窗口&#xff0c;其实就是…

网络编程:TCP机械臂,UDP文件传输

1.TCP机械臂测试 程序代码&#xff1a; 1 #include<myhead.h>2 #define SER_IP "192.168.126.112" //服务器IP3 #define SER_PORT 8888 //服务器端口号4 5 #define CLI_IP "192.168.126.121" //客户端IP6 #define CLI_PORT 9999 //…

C++ 第三方boost库 windows编译

网址 https://levelup.gitconnected.com/the-definite-guide-on-compiling-and-linking-boost-c-libraries-for-visual-studio-projects-c79464d7282d https://www.boost.org/ 安装 下载boost源码包 解压到本地 打开vs命令行 进入当前目录&#xff0c;执行编译&#xff0…

vs 设置项目依赖的cmake 版本

cmake_minimum_required(VERSION 3.16) cmakelist.txt 这句话都不陌生&#xff0c; 设置依赖的最低cmake版本 可是当电脑上装了好几种版本的cmake&#xff0c; 并且每个项目依赖的版本都不同 以及需要vs 可视化界面编译时 找不到地方设置&#xff08;找了两次 没找到 百度也…

【论文阅读】TensoRF: Tensorial Radiance Fields 张量辐射场

发表于ECCV2022. 论文地址&#xff1a;https://arxiv.org/abs/2203.09517 源码地址&#xff1a;https://github.com/apchenstu/TensoRF 项目地址&#xff1a;https://apchenstu.github.io/TensoRF/ 摘要 本文提出了TensoRF&#xff0c;一种建模和重建辐射场的新方法。不同于Ne…