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

    杨校老师课堂之字符排序算法——排序结合字符标记专项题单

    一、知识重点(一)字符的本质:数组映射字符核心逻辑:用数组下标映射字符的 ASCII 值,数组元素存储字符出现的次数(或是否出现)。 字符 → 下标:利用字符的 ASCII 码(如 'a' 的 ASCII 是 97,'A' 是 65 ),直接作为数组下标。次数 → 元素值:数组元素值记录该字符出现的次数(或标记是否出现)。 (二)字符的 3 大典型应用场景1. 统计每个字符的出现次数(字符的统计)2. 找出现次数最多的字符字符的计数)3. 找未出现的字符字符的存在)(三)字符的关键知识点知识点说明数组与 ASCII 的映射利用字符的 ASCII 码作为数组下标,实现 “字符→次数” 的直接映射数组的初始化需覆盖目标字符的 ASCII 处理复杂需求:多条件筛选(如同时统计大小写、排除特殊字符)结合排序输出(如按出现次数排序,而非 ASCII 顺序)二、专项训练1.

    20500编辑于 2025-07-03
  • 来自专栏C++信息学奥赛

    杨校老师课堂之排序——标记

    (如 a[t] = 1;)数组作为 “标记表” 的应用(用 0/1 表示元素是否出现过)数组范围与边界数组下标从 0 开始(但代码中常从 1 开始使用,需注意对应关系)静态数组大小的限制(如 a[1005 【输入样例】5 32 4 5【输出样例】1 3#include <iostream>using namespace std;int a[1005] = {0}; // 定义标记数组,初始化为0(所有元素未被标记 )int main() { int n, m, t; cin >> n >> m; // 输入n(总范围)和m(待标记元素数量) // 标记阶段:将输入的m个元素在数组a中对应位置设为 i未被标记 cout << i << " "; // 输出该元素 } } return 0;}3. (标记为1) for (int i = 1; i <= m; i++) { cin >> t; a[t] = 1; // 将元素t对应的数组位置标记为1

    18700编辑于 2025-07-03
  • 来自专栏C++信息学奥赛

    杨校老师课堂之排序算法——标记计数练习

    用于存储数字出现的次数 int k, t; // k 表示输入数字的次数,t 表示输入的数字 cin >> k; // 从标准输入读取输入数字的次数 k // 输入每个数字并进行次数标记 从标准输入读取一个整数到 t t = t + 50; // 将 t 加上 50 ++a[t]; // 将数组 a 中下标为 t 的元素值加 1 } // 遍历每个查找出现次数超过一半数字 一起来找k题目描述输入n(n<=5000)个整数,并进行从小到大排序,找到第k个位置的值并进行输出(相同大小数字只计算一次),k<=1000,正整数均小于30000。 从标准输入读取一个整数到 t ++a[t]; // 将数组 a 中下标为 t 的元素值加 1 } int cnt = 0; // 定义计数器 cnt 并初始化为 0 // 遍历每一个对出现数字进行计数 ,输出并进行标记 for(int i = 1; i <= n; ++i){ cin >> x; // 从标准输入读取一个整数到 x if(a[x] == 0){

    20900编辑于 2025-07-05
  • 来自专栏C++信息学奥赛

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

    (如 a[5]=1 表示数字 5 出现过)空间换时间:通过 O (1) 时间复杂度完成元素查询与标记统计与筛选计数统计:通过 a[t]++ 统计数字出现次数(第三套代码)补集思想:输出未被标记的元素(第二套代码 )排序输出:通过控制遍历顺序实现升序 / 降序输出(第三套代码)三、循环与条件控制for 循环的灵活应用正向遍历:从 1 到 n(输入阶段)或 1 到 100(输出阶段)反向遍历:从 100 到 1(实现降序输出 【输入样例】2 7 4 1 8【输出样例】3 5 6 9 10#include <iostream>using namespace std;int a[15] = {0}; // 定义标记数组,用于标记 1-10范围内的数字是否出现过,初始全为0int main() { int t; // 标记阶段:读取5个输入数字,并在数组a中标记这些数字出现过 for (int i = 1 ,初始全为0int main() { int n, t; cin >> n; // 输入数字的总数量 // 标记阶段:读取n个输入数字,并在数组a中标记这些数字出现过

    23400编辑于 2025-07-03
  • 来自专栏我的博客

    排序

    排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。 每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用排序进行排序) 思想: 设待排序序列的元素取值范围为0到m,则我们新建一个大小为m+1的临时数组并把初始值都设为0,遍历待排序序列 ,把待排序序列中元素的值作为临时数组的下标,找出临时数组中对应该下标的元素使之+1;然后遍历临时数组,把临时数组中元素大于0的下标作为值按次序依次填入待排序数组,元素的值作为重复填入该下标的次数,遍历完成则排序结束序列有序 示例: $v){ for($i = 0; $i < $v; $i++) { echo $k; } } 应用大量数据排序 比如9亿不重复的9位数字排序,可以初始化

    72560发布于 2018-04-28
  • 来自专栏用户2442861的专栏

    排序

    每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用排序进行排序)。排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,排序使用线性时间(Θ(n))。 但排序并不是 比较排序,他不受到 O(n log n) 下限的影响。        总共有100个。然后对A[1..n]从头到尾扫描一遍,把每个A[i]放入对应的B[j]中。 然后再对这100个中每个里的数字排序,这时可用冒泡,选择,乃至快排,一般来说任何排序法都可以。 如果所有的数字都落在同一个中,那就退化成一般的排序了。 当然排序的空间复杂度为O(N+M),如果输入数据非常庞大,而的数量也非常多,则空间代价无疑是昂贵的。此外,排序是稳定的。

    76240发布于 2018-09-14
  • 来自专栏数据结构与算法

    排序

    排序        排序的思想是若待排序的记录的关键字在一个明显有限范围内(整型)时,可设计有限个有序,每个桶装入一个值(当然也可以装入若干个值),顺序输出各的值,将得到有序的序列。

    61090发布于 2018-04-12
  • 来自专栏Jed的技术阶梯

    排序

    排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序、选择排序、插入排序、归并排序、快速排序和堆排序都是基于比较的排序,而排序提出了一种新的思路,即基于数据状态的排序。 1. 排序的思想 (1) 得到无序数组的取值范围 ? (2) 根据取值范围"创建"对应数量的"" ? (3) 遍历数组,把每个元素放到对应的""中 ? ,总的来说为O(n) 稳定性:排序是否稳定取决于""用什么数据结构实现,如果是队列,那么可以保证相同的元素"取出去"后的相对位置与"放进来"之前是相同的,即排序是稳定的,而如果用栈来实现"",则排序一定是不稳定的 ,因为排序可以做到稳定,所以排序是稳定的排序算法 3. 排序的实现之基数排序(待更新) (1) 基数排序图示过程 (2) 基数排序Java代码实现

    1.2K60发布于 2019-05-09
  • 来自专栏用户1175783的专栏

    # 排序

    # 排序 # 原理 求出无序集合的最大值与最小值(这里的最小值指存在负数的情况),创建对应的数组长度 length=max+1 这里要处理一下负数 if min<0: length+=abs(min) 该length就是数组的长度,并创建这个数组将所有值初始化为0 然后遍历无须数组,修改中元素的个数(数组所以对应的值就是无需数组中相同值的个数) 最后只需要将数组中值大于 # 实现 inputArr = [ 11,10,199383, 34, -1,-32,-29, 4, 0, 34, 5, 4, 36, 1, 8, 123, 453, 1008] print("未排序集合 minItem>item): minItem=item # 最小值,最大值 print("min:{0}\tmax:{1}".format(minItem,maxItem)) # 创建数组 0): sortArr[sortIndex]=index bigArr[index]-=1 sortIndex+=1 print("已排序集合

    44820发布于 2019-09-10
  • 来自专栏后端知识体系

    排序

    # LeetCode-排序 排序算法回顾 示例1 输入: nums = [4,0,1,2,0,5] 输出: [0,0,1,2,4,5] # 解题思路 排序(Bucket Sort)的原理很简单 在排序时,创建容量为MAX的数组r,并将数组元素都初始化为0;将容量为MAX的数组中的每一个单元都看作一个""。 在排序时,逐个遍历数组a,将数组a的值,作为"数组r"的下标。 ,在计数排序中,每个只存储相同的元素 而排序中每个存储一定范围的元素,通过映射函数,将待排序数组中的元素存储到各个对应的中 之后对每个中的元素进行排序 最后将非空桶中的元素逐个放入原序列中 排序需要尽量保证元素分散均匀 ,否则当所有数据集中在同一个中时,排序就会失效 排序的稳定性取决于内部使用的排序算法 # Java代码2 import java.util.ArrayList; import java.util.Collections N,共分为M个,主要步骤有: N次循环,将每个元素装入对应的中 M次循环,对每个中的数据进行排序(平均每个有N/M个元素) 一般使用较为快速的排序算法,时间复杂度为O(nlogn),实际的排序过程是以链表形式插入的

    40830编辑于 2022-07-14
  • 来自专栏hotarugaliの技术分享

    排序

    简介   排序是将待排序序列分到有限数量的中,然后对每一个分别进行排序排序的前提假设为被排序序列的关键字数值符合均匀分布,此时排序的平均时间复杂度为 ,最坏时间复杂度为 其中 为的数量。当数量 时,此时排序的复杂度为线性复杂度 。   排序是非原址的,其稳定性取决于内层排序的稳定性。一般采用稳定的插入排序作为内层排序算法,此时排序是稳定的。 2. 思想 排序的主要思想是对待排序序列的关键字数值进行分块,每一块对应一个,然后对每个使用插入排序(或其他排序算法)进行排序,最后将所有中的元素串联起来即得到有序序列。 3. +1] = bkt[j]; j--; } bkt[j+1] = key; } } // 排序

    40930编辑于 2022-03-01
  • 来自专栏seth-shi的专栏

    排序算法-排序

    排序很适用于有 0~100 个数, 然后打乱顺序, 重新分配. 不过如果给定的数据范围差距很大, 排序的算法效率变低. 步骤 申请 n 个,根据需求 遍历一个给定的数组,找到最大值和最小值 遍历数组,假设遍历的值为num,按照公式floor((num - min) / n)即可得知放入哪个 如果中已存在元素,拉出一个链表 ,并且按照从小到大的顺序 重复 3,4 直至把所有元素装入中 遍历所有中的链表, 直接把每一个元素载入数组,排序即可完成 package main import ( "fmt" " bucketChunk := (max - min + 1) / buckets bucketLinks := make([]*LinkList, buckets) // 把所有数字放入中并且排序 } if b.head.data > num { b.head = &Node{num, b.head} return } // 排序插入

    32610编辑于 2023-12-18
  • 来自专栏JavaEE

    排序算法 --- 排序

    一、排序思想 之前将的计数排序,有些局限性,比如数列最大值和最小值差距不能太大,而且只能排整数。排序就对这些局限性做了弥补。排序的思想就是每个代表一个区间范围,里面可以装若干个元素。 然后对这些内部进行排序,最后遍历这些,那么数列就是有序的了。 排序 然后开始遍历原始数列,把元素放入对应的中,如下: ? 排序 对每个内部的元素进行排序,如下: ? 排序 最后遍历所有的,输出的元素就是有序的了。 排序的缺点:如果数据分布不均衡,比如最大值1000,最小值0.5,剩余元素都是零点几的,也就是说最后一个放最大元素,其他元素都在第一个,这样性能就会下降,并且创建了很多空桶,浪费空间。 (num).add(arr[i]); } // 对每个内部进行排序 for (int i = 0; i < buckets.size(); i++) {

    51851发布于 2020-10-10
  • 来自专栏算法

    排序算法之排序

    排序简介 排序(Bucket Sort)是一种基于分布排序的算法,它是计数排序的扩展。 排序的原理 排序的基本思想是将待排序的数据分到有限数量的里,每个负责排序其中的一部分数据,从而使得整个排序过程可以并行执行,提高了排序效率。 排序的适用场景 排序适用于以下场景: 数据范围已知:当数据的范围已知且有限时,排序可以高效地进行排序。 大量数据:对于大量数据,排序可以减少排序的时间。 排序与其他排序算法的比较 与其他排序算法相比,排序有以下特点: 空间效率:排序需要额外的空间来存储,这可能在空间有限的情况下成为一个问题。 排序的变种 排序有一些变种,可以提高其效率: 基数排序排序的一种变种,通过多次分配和收集中的数据来实现排序

    40410编辑于 2024-12-10
  • 来自专栏编程理解

    排序算法(九):排序

    对每个中元素进行排序,则所有中元素构成的集合是已排序的。 快速排序是将集合拆分为两个值域,这里称为两个,再分别对两个进行排序,最终完成排序排序则是将集合拆分为多个,对每个进行排序,则完成排序过程。两者不同之处在于,快排是在集合本身上进行排序,属于原地排序方式,且对每个排序方式也是快排。 排序则是提供了额外的操作空间,在额外空间上对进行排序,避免了构成过程的元素比较和交换操作,同时可以自主选择恰当的排序算法对进行排序排序算法的选择,从待排序集合中元素映射到各个上的过程,并不存在元素的比较和交换操作,在对各个中元素进行排序时,可以自主选择合适的排序算法,排序算法的复杂度和稳定性,都根据选择的排序算法不同而不同。 与计数排序不同,排序的步骤 2 完成之后,所有元素都处于中,并且对中元素排序后,移动元素过程中不再依赖原始集合,所以可以将中元素移动回原始集合即可。

    72620发布于 2018-09-13
  • 来自专栏计算机技术

    排序算法

    排序算法就是把数据平分到每一个中,然后对中的数据进行排序,再按的顺序依次倒出数据,排序算法很好理解。排序算法也是以空间换时间的算法。 举例说明一下排序算法的 以数组a = [61, 71, 14, 30, 18 ]为例, 假如每个放2个数,那就需要三个。 找出数组中的最大值71,最小值14, 然后依次计算每个数据应该放入的。 计算的最小间隔gap = (71-14)/3=19。 每一个数据在中的位置 d = (a[i]- 14)/19。 计算三个分别装的数据为[14, 18, 30], [], [61, 71]。 把三个的数据收集起来,得到排序结果:14, 18, 30, 61, 71。 以python实现的排序算法: def bucket_sort(elements, num): n = int(len(elements) / num) + 1 buckets = [

    57850编辑于 2022-03-24
  • 来自专栏前端小叙

    排序JavaScript

    // 排序 // 公式 // 的数量 = (最大值 - 最小值)/ 数组长度 + 1 // 元素所属的位置 =( 元素大小 - 最小值)/ 数组长度 function bucketSort(arr ) { let min = Math.min(...arr); let max = Math.max(...arr); // 代表的数量 let bucketSize ); for (let i = 0; i < arr.length; i++) { // 获取元素应该放置的的位置 const index = parseInt ((arr[i] - min) / arr.length); // 将对应元素塞入内 if (Array.isArray(bucketArray[index])) { bucketArray[index] = []; bucketArray[index].push(arr[i]); } } // 对每个中的元素进行排序

    36720编辑于 2022-08-03
  • 来自专栏DDD

    算法渣-排序-排序

    没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺;跟着算法渣一起从零学算法 线性排序 常见的三种以线性时间运行的算法:计数排序、基数排序排序;网上教程不少,但三者经常混淆,称排序但实质可能是计数排序 每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用排序进行排序)。 排序是鸽巢排序的一种归纳结果。 【刚开始按照示例图的方式理解了排序分10个,以十分位为号放入各个,也算是排序一种实现方式,但还是狭隘了】 ---- 在实际应用时,其实并不然必须元素范围为[0,1),整数,小数都是可以的,只要分布均匀就能最大发挥排序优势 优质的排序需要考虑几个因素: 的数量:越多,占用空间越大 区间跨度:之间的跨度 内元素的排序 一般区间跨度: 除了最后一个只包含一个最大值之外,其余各之间的区间跨度=(最大值-最小值 则每个的元素为n/m; 当辅助函数为冒泡排序O(n^2)时,排序为 O(n)+mO((n/m)2); 当辅助函数为快速排序时O(nlgn)时,排序为 O(n)+m*O(n/m log(n/m))

    59240发布于 2021-03-23
  • 来自专栏运维开发王义杰

    算法:排序

    什么是排序排序(Bucket Sort)是一种分布式排序算法,将元素分布到有限数量的中,然后对每个中的元素进行排序。最后,将所有中的元素连接在一起。 2. 排序的工作原理 2.1 创建 根据输入数据的分布范围,创建一定数量的。 2.2 将元素分配到 将输入数据根据某种映射函数分配到相应的中。 2.3 对每个排序 可以使用其他排序算法或递归使用排序本身对每个内的元素进行排序。 2.4 合并 将所有中的元素连接在一起,得到排序结果。 3. 排序的优缺点 优点:在数据分布均匀的情况下效率高。 缺点:对数据分布有较强的依赖。 总结 排序是一种非常有趣且实用的排序算法,特别适用于数据分布均匀且范围广泛的场景。 通过合理选择的数量和大小,可以实现非常高的排序效率。 排序也是对排序算法适应不同场景的一个很好的案例,展示了如何根据具体问题设计合适的解决方案。

    37410编辑于 2023-09-26
  • 来自专栏swag code

    BucketSort-排序-计数排序

    import java.util.Arrays; public class BucketSort { //排序-计数排序 public static void bucketSort(int[]

    39650发布于 2018-08-20
领券