CountingSort(计数排序)原理及C++代码实现
计数排序是需要假设输入数据的排序之一,它假设输入元素是0到k区间内的一个整数,其中k为某个整数。当k=O(n)时,计数排序的时间复杂度为θ(n)。
因为不是通过比较来排序,所以它的时间复杂度可以达到θ(nlgn)以下。
计数排序是稳定的排序之一。
代码如下:(仅供参考)
//计数排序期望输入数据都是小区间内的整数
void CountingSort(int * const begin, int * const end) {
vector<int> temp(); //假设输入值小于10000
vector<int> out(end - begin); for (int i = ; i < end - begin; ++i)
++temp[*(begin + i)];
for (int i = ; i < ; ++i)
temp[i] += temp[i-];
for (int i = end - begin - ; i >= ; --i) {
out[temp[*(begin + i)] - ] = *(begin + i);
--temp[*(begin + i)];
}
for (int i = ; i < end - begin; ++i)
*(begin + i) = out[i];
}
CountingSort(计数排序)原理及C++代码实现的更多相关文章
- CodeForces 558E(计数排序+线段树优化)
题意:一个长度为n的字符串(只包含26个小字母)有q次操作 对于每次操作 给一个区间 和k k为1把该区间的字符不降序排序 k为0把该区间的字符不升序排序 求q次操作后所得字符串 思路: 该题数据规模 ...
- 计数排序与桶排序python实现
计数排序与桶排序python实现 计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 ...
- 计数排序(counting-sort)——算法导论(9)
1. 比较排序算法的下界 (1) 比较排序 到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界. ...
- 算法-java代码实现计数排序
计数排序 第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...
- 小白初识 - 计数排序(CountingSort)
计数排序,属于桶排序特殊的一种. 当要排序n个数据的时候,如果所处的范围不大,我们可以取其中的最大值K,并将数据分散在K个桶里面, 每个桶里面的数据都是相同的(这样省去了桶内排序的时间),然后顺序取出 ...
- 计数排序(counting-sort)
计数排序是一种稳定的排序算法,它不是比较排序.计数排序是有条件限制的:排序的数必须是n个0到k的数,所以计数排序不适合给字母排序.计数排序时间复杂度:O(n+k),空间复杂度:O(k),当k=n时,时 ...
- 常见排序算法原理及JS代码实现
目录 数组 sort() 方法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序 创建时间:2020-08-07 本文只是将作者学习的过程以及算法理解进行简单的分享,提供多一个角度的 ...
- JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- Hark的数据结构与算法练习之计数排序
算法说明 计数排序属于线性排序,它的时间复杂度远远大于常用的比较排序.(计数是O(n),而比较排序不会超过O(nlog2nJ)). 其实计数排序大部分很好理解的,唯一理解起来很蛋疼的是为了保证算法稳定 ...
随机推荐
- Android aar同步Failed to resolve: :nuisdk:
在app.gradle中android.dependencies同一级别下加入: repositories { flatDir { dirs 'libs' } }
- python3编码问题个人理解
#coding=utf-8 a = "你" # 这个字符串是Unicode和 a = u“你”等价b = b'\\u4f60' #这个表示b是字节串(如果需要显示b的值则 prin ...
- JAVA 算法练习(一)
用java写了几道编程题目,分享给大家 语法和C语言几乎一样,不懂 java 会 c 也可以看明白的. 最大连续数列和 题目说明 对于一个有正有负的整数数组,请找出总和最大的连续数列.给定一个int数 ...
- .net学习——第一个程序
时隔3年.这个窗口 看到觉得特别亲切,舒服 昨天学了 一些概念 ref out 以及引用类型值类型.lambda 匿名方法 什么的 发现啊.当你知道 内存的 数值和对象的处理机制,js的匿名函数,钩 ...
- java 环境变量配置搭建(1)
基础常识,classPath配置,朱姐,跨平台性,world组成部分
- 自定义的listbox支持拖放
unit unit2; interface uses Classes, Controls, StdCtrls; type TListBox2 = class(TCustomListBox) prote ...
- softmax推导以及多分类的应用
- AtCoder - 4371 Align(分类讨论)
Align AtCoder - 4371 Problem Statement You are given N integers; the i-th of them is Ai. Find the ma ...
- python编程:从入门到实践----第六章:字典>练习
6-1 人:使用一个字典来存储一个熟人的信息,包括名.姓.年龄和居住的城市.该字典应包含键first_name .last_name .age 和city .将存储在该字典中的每项信息都打印出来. f ...
- keras猫狗图像识别
这里,我们介绍的是一个猫狗图像识别的一个任务.数据可以从kaggle网站上下载.其中包含了25000张毛和狗的图像(每个类别各12500张).在小样本中进行尝试 我们下面先尝试在一个小数据上进行训练, ...