首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏C++信息学奥赛

    杨校老师课堂之不去排序算法——计数应用专项题单

    排序题目描述输入5个不大于10的正整数,请按照从小到大的顺序输出这5个数。输入描述输入5个正整数。输出描述从小到大顺序输出5个数。中间用空格隔开。 俄罗斯套娃(不去)题目描述本来有一个完整的俄罗斯套娃,现在被小可都拆开了,很是凌乱,现在需要你帮我按套娃的尺寸的给我(每个尺寸大小可能重复),帮我一起把套娃组装起来!

    19200编辑于 2025-07-03
  • 来自专栏xiaosen

    数据结构算法--7 排序

    > 在计数排序中,如果元素的范围比较大(1到1亿之间),如何改造算法? > 排序:首先将元素分在不同的中,在对每个中的元素排序。 代码部分: def buckt_sort(li,n=10,max_num=1000): # n为的个数 buckets=[[] for _ in range(n)] # 创建 # 步数为-1,反向冒泡排序 if buckets[i][j]<buckets[i][j-1]: buckets[i][j],buckets[i] sotr_list # 测试 import random li=[random.randint(0,1000) for i in range(1000)] li=buckt_sort(li) print(li) 排序的表现取决于数据的分布 ,也就是对不同数据排序时采取不同的分策略 > 平均情况时间复杂度:O(n+k) > 最坏情况时间复杂度:O(n*n*k) > 空间复杂度:O(nk)

    17310编辑于 2024-03-15
  • 来自专栏C++信息学奥赛

    杨校老师课堂之去排序算法——标记应用专项题单

    ]=1 表示数字 5 出现过)空间换时间:通过 O (1) 时间复杂度完成元素查询与标记统计与筛选计数统计:通过 a[t]++ 统计数字出现次数(第三套代码)补集思想:输出未被标记的元素(第二套代码)排序输出 例如走过2 7 4 1 8,则请告诉他:3 5 6 9 10没有走过。【输入格式】输入一行,五个数字,表示已经走过的路径编号。【输出格式】输出一行,五个数字,表示没有走过的路径编号。 【输入样例】2 7 4 1 8【输出样例】3 5 6 9 10#include <iostream>using namespace std;int a[15] = {0}; // 定义标记数组,用于标记

    23800编辑于 2025-07-03
  • 来自专栏IT从业者张某某

    C++018-C++排序及其应用

    排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的里,每个再分别排序(有可能再使用别的排序算法或是以递归方式继续使用排序进行排)。 从不是空的桶子里把项目再放回原来的序列中 排序算法中,待排序的数据量和的数量并不一定是简单的“一对一”的关系,更多场景中是“多对一”的关系, 排序应用 我们可以利用来完成去与计数的任务 解决去问题时,只需将每个数据装入中后,再根据中是否有数据( tong[i]>0),来输出对应的的编号,只输出1次而不要多次输出。 所有整数去后从低到高排序后的结果。 本文为C++排序序案例,包括相关案例练习。

    64340编辑于 2023-10-16
  • 来自专栏Triciaの小世界

    蒜头君的随机数 【C++排序与去(sort函数与unique函数)】

    然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。 请你协助蒜头君完成“去”与“排序”的工作。 输入格式 共两行,第一行为一个正整数n。 Sort函数 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。 sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include< algorithm>的c++标准库中。 sort类函数总结: sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy 也包含在头文件为#include< algorithm>的c++标准库中。 一般使用前需要对容器进行排序,这样才能实现对整个数组去

    1.4K20编辑于 2023-04-12
  • 来自专栏IT从业者张某某

    算法05-排序算法

    总结 本系列为C++算法学习系列,会介绍 算法概念与描述,入门算法,基础算法,数值处理算法,排序算法,搜索算法,图论算法, 动态规划等相关内容。本文为排序部分。 第七个数7开始进行插入排序。因为1、3、5、6都是小于7的,所以位置不用改动,由于8大于7,因此往后挪一个位置,然后在6和8之间插入数字7。得到有序序列{1,3,5,6,7,8}。 从不是空的桶子里把项目再放回原来的序列中 排序算法中,待排序的数据量和的数量并不一定是简单的“一对一”的关系,更多场景中是“多对一”的关系, 排序应用 我们可以利用来完成去与计数的任务 解决去问题时,只需将每个数据装入中后,再根据中是否有数据( tong[i]>0),来输出对应的的编号,只输出1次而不要多次输出。 所有整数去后从低到高排序后的结果。

    60330编辑于 2023-10-16
  • 来自专栏C++教程

    【Example】C++ 标准库常用容器全面概述

    vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时分配。分配的内存总量可用 capacity() 函数查询。额外内存可通过对 shrink_to_fit() 的调用返回给系统。  (C++11 起) 分配通常是性能上有开销的操作。若元素数量已知,则 reserve() 函数可用于消除分配。 两者同样都会根据键值大小进行升序排序。 序列由哈希函数弱排序,哈希函数将此序列分区到称为存储的有序序列集中。 在每个存储中,比较函数确定任何一对元素是否具有等效的排序。 每个元素同时用作排序键和值。 哈希函数将此序列分区到称为存储的有序序列集中。 在每个存储中,比较函数将确定任一元素对是否具有等效顺序。 每个元素存储两个对象,包括一个排序键和一个值。

    4.4K30编辑于 2022-04-28
  • 来自专栏五分钟学算法

    【图解数据结构】 一组动画彻底理解排序

    排序 排序(Bucket sort)是一种基于计数的排序算法(计数排序可参考上节的内容),工作的原理是将数据分到有限数量的桶子里,然后每个再分别排序(有可能再使用别的排序算法或是以递回方式继续使用排序进行排序 把数据放到对应的中。 对每个不为空的中数据进行排序。 拼接不为空的中数据,得到结果。 算法演示 动画演示GIF加载有点慢,请稍等片刻^_^ ? 再次遍历整个数列,按照公式 floor((数字 – 最小值) / 11) 将数字放到对应的中 比如,数字 7 代入公式 floor (( 7 – 2 ) / 11 ) = 0 放入 0 号 ,判断中已存在的数字与新插入数字的大小,按照左到右,从小到大的顺序插入(可以使用前面讲解的插入排序)实现 比如,插入数字 19 时, 1 号中已经有数字 23 ,在这里使用插入排序,让 19 排在 这样就完成了 排序 代码实现 为了更好的让读者用自己熟悉的编程语言来理解动画,笔者将贴出多种编程语言的参考代码,代码全部来源于网上。 C++代码实现 ? Java代码实现 ?

    1.6K20发布于 2018-12-25
  • 来自专栏全栈程序员必看

    十大排序——最全最详细,一文让你彻底搞懂

    特别鸣谢:十大经典排序算法(动图演示) 注:下面的排序代码由Python,Java和C++语言完成 Key Words : C++ Python Java Sort ---- Table 排序 比较类排序 Top 排序 Bucket Sort 排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。 排序的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的里,每个再分别排序(有可能再使用别的排序算法或是以递归方式继续使用排序进行排)。 图示算法 在中的元素分布: 然后,元素在每个排序: 关于排序的动态图,可以点击这里。 非比较类排序算法总结 这三种排序算法都利用了的概念,但对的使用方法上有明显差异: 基数排序:根据键值的每位数字来分配; 计数排序:每个只存储单一键值; 排序:每个存储一定范围的数值。

    1.3K21编辑于 2022-09-15
  • 来自专栏Java3y

    基数排序就这么简单

    一、基数排序(排序)介绍 来源360百科: 基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bin sort,顾名思义 从上面的简单介绍,是并不了解基数排序是怎么弄的~基数排序不同与其他的7排序,其他7排序本质上都是按照交换或者比较来进行排序,但是基数排序并不是,它是按照分配,回收(分配到不同的位置上,然后回收).. 基数排序挺简单的,下面我就来看一下基数排序的流程…. 我们有9个,将数组的数字按照数值分配中: ? 其实也是一样的: 第一趟排序将数字的个位数分配到桶子里面去,然后回收起来,此时数组元素的所有个位数都已经排好顺序了 第二趟排序将数字的十位数分别分配到桶子里面去,然后回收起来,此时数组元素的所有个位数和十位数都已经排好顺序了 前面的演示是已经知道数组元素的数据的情况下来进行存放,但是一般我们是不去理会数组内元素的值的。那如果位数很多(万位)或者都是个位数,这个条件我们怎么去处理呢?

    1.3K70发布于 2018-03-30
  • 来自专栏学习

    深入剖析C++ STL中的set:高效管理有序数据的利器

    前言:在 C++ 标准模板库(STL)中,set是一个常用的关联容器,用于存储唯一的、自动排序的数据。它是解决去、有序存储、快速查找等问题的绝佳工具。 set 是 C++ STL 提供的一个模板类,基于红黑树实现,具有以下核心特性: 元素唯一:set 会自动去,插入相同的元素时,新元素会被忽略。 升序排序 set<int> s; // 去+降序排序(给⼀个⼤于的仿函数) //set<int, greater<int>> s; s.insert(5); s.insert(2); s.insert #include<iostream> #include<set> using namespace std; int main() { // 相⽐set不同的是,multiset是排序,但是不去 multiset set<int> s1(nums1.begin(), nums1.end()); // 将 nums2 的元素存入另一个 set,自动去排序 set

    55410编辑于 2024-11-21
  • 来自专栏Python与算法之美

    3小时吃掉HiveSQL:从基础语法到性能优化

    • 2,数据表分区和分的区别是什么?分有什么用? • 3,常用select查询语句的执行顺序是什么?给出join、groupby、where 和窗口函数 的执行顺序排序。 分和分区的区别: • 每个分区对应一个子目录,每个分对应一个文件。 • 分区字段不是实际的列,分字段必须是实际的列。 • 分区表的分区数量可以一直增长,而分表创建好之后的数量就固定不变了。 • 7,DISTINCT: 去除重复的记录。 • 8,ORDER BY: 对记录进行排序。 • 9,LIMIT: 限制返回的记录数。 这与SQL中有些数据库默认的UNION(去)行为略有不同。 如果希望得到不重复的数据,通常需要在UNION ALL之后使用DISTINCT或其他去方法。 • COLLECT_LIST: 将分组中的值收集到一个列表中(不去) 可以在GROUP BY子句中使用HAVING子句来过滤分组。

    1.6K12编辑于 2025-07-30
  • 来自专栏Java

    数据结构与算法面试:基于比较的排序算法时间复杂度最坏情况下是 O(nlogn),请问有没有更快的算法?(提示:计数排序、基数排序

    基数排序的实现思路如下: 用一个数组来记录每个可能的数字出现的次数(这里假设数值范围在0~9之间)。 将原始数组a依次按照个位、十位、百位、千位…进行排序。 对于某个"当前位数"可以采用计数排序或者排序的方式,在该轮排序后,原始数组a已经被排好序了。 下面是使用C++实现基数排序的代码,并附带详细注释: #include <iostream> #include <vector> using namespace std; void radix_sort 0; j < n; ++j) { a[j] = bucket[j]; } } } int main() { vector<int> a = {7, [j]; } } } public static void main(String[] args) { int[] a = {7,

    39600编辑于 2025-01-21
  • 来自专栏全栈程序员必看

    Java数据结构与算法(排序)——基数排序(LSD)

    一、基本思想 最低位优先法,LSD(Least significant digital)—— 先从最低位开始排序,再对次低位排序,直到对最高位排序后得到一个有序序列(位数不同时高位补 0)。 排序过程如下: (1)先根据个位进行排序,得到: 0—— 1——81 2——22 3——73,93,43 4——14 5——55,65 6—— 7—— 8——28 9——39 ( 再根据十位进行排序,得到: 0—— 1——14 2——22,28 3——39 4——43 5——55 6——65 7——73 8——81 9——93 (3)将按十位排序的结果整理得到新数列 0~9共十位,创建十个; int[] num = new int[10];// 记录每个中存入数的个数 while(k < d){ // 按位存入中:k = 1时,按个位;k = = 0){ for (int j = 0; j < num[i]; j++) { array[c++] = t[i][j]; } } num[i

    60910编辑于 2022-08-23
  • Deskflow 局域网共享鼠标键盘(New)

    开启了共享剪贴版时,截屏的内容会跨电脑传输(有可能是我们希望的),造成软件卡顿(表面上看鼠标过不去),记得随后随便复制点字符,清理掉图片。 2. 最新版可能需要最新版的Microsoft Visual C++ 环境,请去微软官方下载:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist 服务端显示连接提示,点Add 跳出配置窗,拖动编辑电脑相对位置,拖到左上角垃圾删除(如果误删除了在用的屏幕,可能需要重启服务器端才能连)。 点击OK就可以用了。

    2.6K00编辑于 2025-07-14
  • 来自专栏动态规划

    C++ —— set系列的使用

    set是key搜索场景的结构,map是key/value搜索场景的结构 2. set和multiset参考⽂档 - C++ Reference https://legacy.cplusplus.com it_s2; } cout << endl; //插⼊⼀段initializer_list列表值,已经存在的值插⼊失败 set<int> s3; s3.insert({ 2,3,4,5,5,7,9,11 } cout << endl; return 0; } 5. multiset和set的差异 multiset和set的使⽤基本完全类似,主要区别点在于multiset⽀持值冗余(也就是不去 ),那么insert/find/count/erase都围绕着⽀持值冗余有所差异,具体参看下⾯的样例代码理解 相比set不同的是,multiset是排序,但是不去 multiset相比 ,但是不去 multiset<int> s = { 4,2,7,2,4,8,4,5,4,9 }; auto it = s.begin(); while (it !

    24100编辑于 2024-11-19
  • 来自专栏Python七号

    Python-排序-有哪些时间复杂度为O(n)的排序算法?

    12, 7, 8, 14, 3, 10, 1, 13, 0, 0, 4, 3, 5] 第0个排序前的内容是[3, 1, 0, 0, 4, 3] 第1个排序前的内容是[7, 7, 8, 5] 第2个排序前的内容是 [13, 12, 14, 10, 13] [0, 0, 1, 3, 3, 4, 5, 7, 7, 8, 10, 12, 13, 13, 14] 这里请注意:如果内的数据极不均匀,极端情况下,只有一个有数据 首先对 B[6] 累计求和,得到新的 B[6] = [2,2,4,7,7,8],B[3]=7 就表示小于等于 3 分的考生个数为 7 个。 根据 B[6] = [2,2,4,7,7,8] 和初始序列 2,5,3,0,2,3,0,3,我们可以得到有序序列 [ 0,0,2,2,3,3,3,5 ] 。 因此我们可以借助稳定的排序算法,先按照最后一位来排序手机号码,然后,再按照倒数第二位排序,以此类推,最后按照第一位排序。经过 11 次排序之后,手机号码就都有序了。

    1.9K20发布于 2020-12-10
  • 来自专栏linux驱动个人学习

    基数排序

    前言 基数排序排序原理不难理解,但是在算法设计上,个人感觉还是比那些常见的排序要难的,耐心慢慢一步步理解,还是比较容易看懂的,注意基数排序有两种,一种是高位优先,一种是低位优先,在这里我只讲低位优先, ,最高位有三位(程序里max=3),所以要进行三遍排序(下图只排了两次,第三遍也一样啦),第一遍,以个位数分,个位相同放在一个里,然后把桶里的数在依次拿出来,第一次拿出,顺序为21,33,234,5 个位数是(第一遍) 0 - 1 21 2 - 3 33 4 234 5 5, 65 6 16, 456, 56 7 327 8 - 9 49 十位数是(第二遍)| 0| 5 1|16 2 |21,327 3 | 33,234 4 | 49 5 | 456,56 6 | 65 7 | - 8|- 9|- 该排序实例,是按部就班的按照来放的,但是由于在排序过程中用到的是二维数组 c++排序实例,是按部就班的按照来放的,但是由于在排序过程中用到的是二维数组,因此造成一定的资源浪费,但二维数组前一个数字表示号,后一个表示放的位置,极大的降低了理解难度,因为每个内放的个数是用

    99230发布于 2019-07-15
  • 来自专栏学习

    【unordered_set和unordered_map】—— 我与C++的不解之缘(二十七)

    然后就是迭代器的不同,set的iterator是双向迭代器,而unordered_set的iterator是单向迭代器;set底层是红黑树,set的迭代器是有序+去的;而unoedered_set底层是哈希 ,unoedered_set是无序+去的。 3. unordered_map 的基本用法 unordered_map 是一个哈希表实现的键值对容器,类似于 map,但是它的元素不按键排序。 然后就是迭代器的不同,map的iterator是双向迭代器,而unordered_map的iterator是单向迭代器;map底层是红黑树,map的迭代器是有序+去的;而unoedered_map底层是哈希 ,unoedered_map是无序+去的。

    38800编辑于 2025-03-23
  • 一篇搞懂接口安全与性能优化:幂等、防重复提交、令牌、防抖与节流

    Redis 实现 Set 集合: 天然去,用于短期请求去 SETNX / SET NX EX: 原子操作保证同一请求只处理一次 可设置过期时间,避免锁死 应用场景:短期幂等控制 、防重复提交 7. MQ 异步去消费 ① 常见 MQ 去方式 RocketMQ(≥5.x):自带消息去功能(基于唯一 keys + Broker 内存缓存) Kafka:支持幂等生产(enable.idempotence =true)避免重复写入 RabbitMQ:原生不去,可用社区 deduplication 插件(基于 message_id 或 header) 通用方案:消费端用 Redis / 数据库 做法: 服务器有一个“令牌”,里有令牌才允许访问接口。 每秒生成一定数量的令牌(比如 1000 张),先到先得,没有令牌的请求直接拒绝或排队。

    32010编辑于 2025-12-17
领券