桶排序---

1、算法概念

桶排序:一种非比较的排序算法。桶排序采用了一些分类和分治的思想,把元素的值域分成若干段,每一段对应一个桶。在排序的时候,首先把每一个元素放到其对应的桶中,再对每一个桶中的元素分别排序,再按顺序把每个桶中的元素依次取出,合并成最终答案。

2、步骤

  1. 将值域分成瑞杆端,每段对应一个桶
  2. 将待排序元素放入对应的桶中
  3. 将个桶内的元素进行排序
  4. 将桶中的元素一次取出

C++语言

桶中只有一种数值

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 7;
int n;
int bucket[MAXN];//一个值对应一个桶
int main() {cin >> n ;for (int i = 1;i <= n;i++) {int x;cin >> x;//由于每个桶中只有一个值,我们只需要记录桶中的元素个数bucket[x]++;}for(int i = 0; i <= n; i++){//值为i的元素有bucket[i]个for (int j = 0; j <= bucket[i]; ++j) {cout << i << " ";}}cout << endl;
}

桶中有多种数值 

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 7;
int n;
vector<int> bucket[MAXN];
int main() {cin >> n ;for (int i = 1;i <= n;i++) {int x;cin >> x;bucket[x / 1000].push_back(x);}for(int i = 0;i < MAXN;i++){//对每个桶的操作}for(int i = 0; i < MAXN; i++){for (auto item : bucket[i]) {cout << item << " ";}}cout << endl;
}

Java语言

import java.util.*;public class Main {private static final int MAXN = 500007;private static int[] bucket = new int[MAXN];public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int i = 1; i <= n; i++) {int x = scanner.nextInt();bucket[x]++;}for (int i = 0; i <= n; i++) {for (int j = 1; j <= bucket[i]; j++) {System.out.print(i + " ");}}System.out.println();scanner.close();}
}
import java.util.*;public class Main {private static final int MAXN = 500007;private static List<Integer>[] bucket = new ArrayList[MAXN];public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int i = 0; i < MAXN; i++) {bucket[i] = new ArrayList<>();}for (int i = 1; i <= n; i++) {int x = scanner.nextInt();bucket[x / 1000].add(x);}for (int i = 0; i < MAXN; i++) {Collections.sort(bucket[i]);}for (int i = 0; i < MAXN; i++) {for (int item : bucket[i]) {System.out.print(item + " ");}}System.out.println();scanner.close();}
}

 

3、桶排序的优势

  • 对于数据量较大但值域较小的数据,如n>10^{7}a_i{}<10^{^{6}},可以做到每个值对应一个桶,桶排序的时间复杂度为O(n)。推荐使用桶排序。
  • 对于值域较小的数据,桶排序的时间复杂度与每个桶内排序的方法有关,优势不明显,对于这种数据一般不适用桶排序。

例题---计数排序

https://www.lanqiao.cn/problems/1314/learning/

给定一个长度为n的数组a,请你将a排完序后输出。

输入描述:

第一行包含一个整数n,表示数组a的长度。

第二行包含n个整数,分别表示a1~an。

输出描述:

输出共一行,包含n个整数,表示排完序后的数组a。

示例:5

           4 3 2 1 5                                          1 2 3 4 5

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

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

相关文章

python面向对象的四大支柱:抽象、封装、继承、多态

1. 抽象 在面向对象编程中&#xff0c;抽象是指将类的属性和方法捆绑在一起&#xff0c;形成一个整体。抽象类无法实例化&#xff0c;但可以作为其他类的基类或父类。在Python中&#xff0c;我们使用abc模块定义抽象类&#xff0c;其中至少包含一个抽象方法。抽象方法是无法直…

EF数据持久化(三层架构,公司查,改)

效果图 Model设置具体流程在下面链接中 https://blog.csdn.net/Mr_wangzu/article/details/136805824?spm1001.2014.3001.5501 DAL using System; using System.Collections.Generic; using System.Linq; using System.Web; using WebApplication2.Models; namespace WebAppli…

基于OpenStack官方的Ubuntu 22.04.3 LTS部署OpenStack-Bobcat教程(Neutron使用OVN)

基于OpenStack官方的Ubuntu 22.04.3 LTS部署OpenStack-Bobcat教程&#xff08;Neutron使用OVN&#xff09; 注意事项机器详情基础配置Controller节点设置主机名设置静态IP配置hosts Compute节点设置主机名设置静态IP配置hosts 验证配置Controller节点 && Compute节点 配…

web蓝桥杯真题:输入搜索联想

代码及注释&#xff1a; <!-- TODO&#xff1a;请在下面实现需求 --> <span>搜索名字: </span> <input placeholder"输入要搜索的名字" v-model"searchQuery"/> //绑定值 <table><thead><tr> //分割…

结构体,联合体,枚举( 2 )

目录 2.联合体 2.1联合体类型的声明 2.2联合体的特点 2.3联合体的内存大小 3.枚举 3.1枚举类型的声明 3.2枚举类型的优点 3.3枚举类型的使用 2.联合体 联合体&#xff08;Union&#xff09;是另一种复合数据类型&#xff0c;它允许我们在同一内存位置存储不同的数据类型…

UE4_动画基础_ 瞄准偏移1D(Aim Offset Blend Space 1D)

瞄准偏移1D基本上可以完成角色的向左看向右看或者向上看向下看&#xff0c;像混合空间1D一样只有一个轴向可用。 操作步骤&#xff1a; 1、新建第三人称模板项目。 2、右键——动画——瞄准偏移1D 选取骨骼 双击打开 3、瞄准偏移混合的是姿势&#xff0c;我们需要创建姿势。 …

结合创新!多尺度特征融合+Transformer,参数和计算成本减半

通过多尺度特征融合&#xff0c;模型能够捕捉到不同层次的视觉细节&#xff0c;而Transformer的自注意力机制能够在这些不同层次的特征之间建立联系&#xff0c;有效地整合全局上下文信息&#xff0c;让模型能够应对多样化的视觉场景和变化。 这种结合策略充分利用了二者各自的…

Android 手机部署whisper 模型

Whisper 是什么? “Whisper” 是一个由OpenAI开发的开源深度学习模型,专门用于语音识别任务。这个模型能够将语音转换成文本,支持多种语言,并且在处理不同的口音、环境噪音以及跨语言的语音识别方面表现出色。Whisper模型的目标是提供一个高效、准确的工具,以支持自动字幕…

npm(Node Package Manager)

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的默认包管理器&#xff0c;它用于安装、更新、配置和移除 Node.js 应用程序中的包。以下是一些常用的 npm 命令&#xff1a; 1. 安装包 npm install <package> - 安装一个包到当前项目&#xff08;默认为 …

2024.4.3 controller+soem双进程调试

需要数据&#xff1a; 各关节减速器减速比&#xff08;符号与关节方向电机方向相关&#xff09;编码器位数17位131072、20位1048576&#xff0c;23位8388608&#xff08;与关节转角换算到电机端脉冲值有关&#xff09;DH参数&#xff08;主要是连杆长度&#xff0c;建立名义运…

库位电子标签可视化管理,让仓库更智能

一、工厂仓储的目前管理现状 目前工厂仓储管理存在诸多问题&#xff0c;如物料数量种类多&#xff0c;寻找困难且耗时&#xff1b;盘点人力成本高且速度慢&#xff1b;存储位置不清晰&#xff0c;常找不到物料&#xff0c;且多发、少发、错料现象时有发生&#xff1b;系统与库…

SSTI模板注入(jinja2)

前面学习了SSTI中的smarty类型&#xff0c;今天学习了Jinja2&#xff0c;两种类型都是flask框架的&#xff0c;但是在注入的语法上还是有不同 SSTI&#xff1a;服务器端模板注入&#xff0c;也属于一种注入类型。与sql注入类似&#xff0c;也是通过凭借进行命令的执行&#xff…

Qt-在QLabel上显示Mat数据

0. 写在前面 用于记录一下&#xff0c;在Qt上显示Mat的数据&#xff0c;记录代码如下&#xff1b; //QLabel中显示处理结果 void MainWindow::matToLabelShow(QLabel *label, Mat &mat) {cv::Mat Rgb;QImage Img;if (mat.channels() 3)//RGB Img{cv::cvtColor(mat, Rgb,C…

C++ 中的 vector 的模拟实现【代码纯享】

文章目录 C 中的 vector 模拟实现1. vector 的基本概念2. vector 的基本操作3. vector 的模拟实现4.代码纯享5. 总结 C 中的 vector 模拟实现 在 C 中&#xff0c;vector 是一个非常重要的容器&#xff0c;它提供了动态数组的功能。在本篇博客中&#xff0c;我们将尝试模拟实现…

函数参数缺省和内联函数【C++】

文章目录 函数参数缺省函数参数缺省的条件和要求 内联函数内联函数的工作原理内联函数的定义方法内联函数的要求解决方法&#xff1a;直接在.h中定义内联函数的函数体 内联函数再Debug模式下默认是不展开的 函数参数缺省 顾名思义&#xff1a;可以少传一个/多个参数给函数&…

防止推特Twitter账号被冻结,应该选什么代理类型IP?

在处理多个 Twitter 帐号时&#xff0c;选择合适的代理IP对于避免大规模帐户暂停至关重要。现在&#xff0c;问题出现了&#xff1a;哪种类型的代理是满足您需求的最佳选择&#xff1f;下面文章将为你具体讲解推特账号冻结原因以及重点介绍如何选择代理IP。 一、推特账号被冻结…

3个 JavaScript 字符串截取方法

在 JavaScript 中&#xff0c;可以使用 substr()、slice() 和 substring() 方法截取字符串. substring() substring() 方法返回一个字符串在开始索引到结束索引之间的一个子集&#xff0c;或从开始索引直到字符串的末尾的一个子集。语法如下&#xff1a; str.substring(inde…

通信术语:初学者入门指南(二)

1.SAR&#xff1a;Synthetic Aperture Radar合成孔径雷达&#xff0c;是一种雷达系统&#xff0c;通常用于地球或行星的遥感成像。相较于传统的实孔径雷达&#xff0c;SAR 通过在相对较长的时间内&#xff0c;对来自同一地点的多个雷达反射信号进行综合处理&#xff0c;实现了更…

.Net 对象与对象之间的映射转换的6中方式以及性能对比

我们在.Net开发的过程中&#xff0c;经常会遇到一个实体对象与另一个实体对象之间的映射转换&#xff0c;接下来我们将依次去实现6个对象间映射转换的方式&#xff0c;并对他们进行性能测试&#xff0c;找出其中效率最高的方式。 通过对象Copy&#xff0c;通过new一个新的实体对…

el-table的复选框勾选整行变色

要实现el-table的复选框勾选整行变色&#xff0c;你可以使用element-ui提供的row-class-name属性结合scoped slot来完成。 首先&#xff0c;你需要为el-table组件添加 row-class-name 属性&#xff0c;并给它绑定一个方法。在这个方法中&#xff0c;你可以根据你的业务逻辑来判…