所谓计数排序,就是建立在计数上的排序。 计数排序不以比较为基础,所以可以打破比较排序$O(nlogn)$的复杂度下界。 我们只要计算出比$i$小的数字有多少个,就可以知道$i$在数据里的排名。然后根据排名,我们就可以反造一波排好序的数据了。 我们用$rk[i]$记录第$i$个数据的排名,$sum[i ...
分类:
编程语言 时间:
2018-09-14 23:05:44
阅读次数:
171
计数排序 计数排序假设 个输入元素都是 到`k k`为某整数) 当 为`O(n) O(n)` 计数排序基本思想是:对于每个输入元素 , 确定小于 的元素个数 先新建一个可变数组c, 初始化为0 c记录a中每个元素出现的个数 然后计算对于 从`0..k i` 最后把元素a[i]放入数组b的正确位置上 ...
分类:
编程语言 时间:
2018-09-14 11:07:58
阅读次数:
168
欢迎Star,本文的所有示例源码都在Github:https://github.com/AndroidHensen/Arithmetic 本篇内容包含 排序的介绍 排序的C的实现 排序的Java的实现 排序的时间复杂度的计算 1、基本思想: 两个数比较大小,较大的数下沉,较小的数冒起来 2、实现步骤 ...
分类:
编程语言 时间:
2018-09-11 13:59:30
阅读次数:
144
小朋友学数据结构(10):基数排序 一、基本思想 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位(即个位数)开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 与其他排序不同的是,基数排序不涉及数的交换。 基数排序是一种 ...
分类:
编程语言 时间:
2018-09-08 00:49:13
阅读次数:
174
目的:掌握 基数排序 的 基本思想与过程、代码实现、时间复杂度 1、基本思想与过程:(只针对数字) (1)首先确定基数为10,数组的长度也就是10.每个数都会在这10个数中寻找自己的位置。 (2)不同于BinSort会直接将数放在数组的下标处,如将 [34] 放在下标为34的位置,即a[34] = ...
分类:
编程语言 时间:
2018-09-02 12:56:46
阅读次数:
174
Radix Sorting 稳定 O(d(r+n)) 不需要进行关键字之间的比较、交换、移动,借助分配和收集完成排序 扑克牌 最主位关键字 最次位关键字 最高位优先 most significant digit first 先按照最主位关键字排序,知道最后一个关键字,必须将序列逐层分割成若干个子序列 ...
分类:
编程语言 时间:
2018-08-30 16:42:43
阅读次数:
200
图片镇楼 插入排序(InsertSort) 步骤: 1.依次选择一个待排序的记录, 2.依次与已经排好序的有序序列比较,并插入 3.持续每次对越来越少的元素重复上面的步骤,直到插完所有元素为。 改进: 二分插入排序,直接和有序序列的中间比较。 希尔排序。 希尔排序(又叫缩小增量排序,ShellSor ...
分类:
编程语言 时间:
2018-08-27 18:36:09
阅读次数:
144
两篇很赞的博文: 后缀数组 最详细讲解 (这一篇代码注释很详细,可以好好研读一番) 知识点 后缀数组 orz后缀数组代码 后缀数组主要实现思想就是倍增法+基数排序,代码难也是因为这两者要同时运用。 如果对基数排序还不懂,可以参考一下这篇博文: 基数排序 今后还是要继续学这个神仙操作,继续加油。 ...
分类:
编程语言 时间:
2018-08-23 00:17:40
阅读次数:
227
给定两个整数数组,对第一个数组进行排序,整数顺序由其在第二个数组中的位置决定。对于没有出现在第二个整数数组中的整数,应排在末尾,其之间的顺序无限制。这里整数的取值范围是[0, 2 ^ 32 - 1]例: 第一个整数数组为 5 1 6 2 1 2 3, 第二个整数数组为2 1 3, 则排序结果为2 2 ...
分类:
编程语言 时间:
2018-08-20 21:48:07
阅读次数:
139
这是本人的第一篇随笔,为的是分享学习经验,和大家讨论一些算法,以便取得些许进步,也是对学习的总结。 话不多说,下面我会用图文的方式向各位介绍桶排序。 1、主要思想: 桶排序的大体思路就是先将数组分到有限个桶中,再对每个桶中的数据进行排序,可以说是鸽巢排序的一种归纳结果(对每个桶中数据的排序可以是桶排 ...
分类:
编程语言 时间:
2018-08-11 21:58:48
阅读次数:
175