Sort a linked list in O(n log n)
time using constant space complexity.
这道题目非常简短的一句话,给链表排序,看到nlogn,我们可以来简单复习一下排序。首先说一下这个nlogn的时间复杂度(根据决策树我们可以得出这个界限),是基于比较排序的最小上限,也就是说,对于没有一定范围情况的数据来说,最快的排序思路就是归并和快速排...
分类:
其他好文 时间:
2014-06-22 09:02:54
阅读次数:
250
概述:排序算法可分为比较性的排序,以及运算性的排序;这里详细介绍这些排序的原理,性能,实现,以及应用场合。前面是维基百科的介绍,这里介绍几个比较典型的算法。理论计算复杂性理论大O符号全序关系列表稳定性比较排序自适应排序排序网络整数排序交换排序冒泡排序鸡尾酒排序奇偶排序梳排序侏儒排序快速排序臭皮匠排序...
分类:
其他好文 时间:
2014-06-18 00:03:48
阅读次数:
483
概述:排序算法可分为比较性的排序,以及运算性的排序;这里详细介绍这些排序的原理,性能,实现,以及应用场合。比较排序一:快速排序1:原理采用了分治思想,在序列A[p...r]中选取一个元素,当然这里是用了p或者r处的元素(规格一致);找到该元素的,满足前面的值都比它小,后面的都比它大;同理让子序列递归...
分类:
其他好文 时间:
2014-06-15 00:41:48
阅读次数:
297
排序算法是我们工作中使用最普遍的算法,常见的语言库中基本都会有排序算法的实现,比如c标准库的qsort,stl的sort函数等。本文首先介绍直接插入排序,归并排序,堆排序,快速排序和基数排序等比较排序算法,然后介绍计数排序,基数排序等具有线性时间的排序算法。本文主要讨论算法的实现方法,并不会过多介绍...
分类:
其他好文 时间:
2014-06-07 21:23:31
阅读次数:
348
6. 线性时间排序
6.1 计数排序
我们之前介绍的所有排序算法,都需要依次比较输入元素之间的大小,有些甚至需要重复比较多次,我们将这一列算法统称为比较排序。
接下来,我们将讨论三种以线性时间运行的排序算法,分别是计数排序、基数排序和桶排序,这些算法都用非比较的操作来确定排序的顺序。
计数排序,该算法的基本思路是,对于某一个元素,已知数组中比该元素小的元素的个数为,则可将该元素放置在的位置上。PS:当有相同元素时,此方案需要做一些特殊处理。...
分类:
其他好文 时间:
2014-06-07 12:23:07
阅读次数:
217
排序(二)
以上排序算法都有一个性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们把这类排序算法称为比较排序。
任何比较排序的时间复杂度的下界是nlgn。
以下排序算法是用运算而不是比较来确定排序顺序的。因此下界nlgn对它们是不适用的。
键索引计数法(计数排序)
计数排序假设n个输入元素中的每一个都是在0到k区间的一个整数,其中k为某个整数...
分类:
其他好文 时间:
2014-05-24 20:26:16
阅读次数:
273
基于比较的排序时间复杂度至少为O(nlgn),在时间上堆排序和快速排序基本上都达到了比较排序的极限,如果要获取更快的排序速度,就需要找不是基于比较的排序方法,位图排序就是其中的一个。
位图排序是效率最高的排序算法,其时间复杂度是O(n),空间复杂度也非常小,但是要求输入的数据不能重复,而且要知道数据的范围。
位图排序的思想比较简单,用计算机的每一位表示一个数,一个int类型的变量就能表...
分类:
其他好文 时间:
2014-05-15 04:41:27
阅读次数:
262
第一、任意一个比较排序算法在最好情况下的时间复杂度也是O(nlogN);
第二、计数排序
假设n个输入元素的每一个都是介于0到k之间的整数,计数排序可用,需要临时存储空间O(K),时间复杂度是O(n).
#include
using namespace std;
void countingSort(int *A,int len,int max)
{
if(A==NULL || len<...
分类:
其他好文 时间:
2014-05-14 23:58:58
阅读次数:
382
线性排序的一种(时间复杂度为(n))
计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。
计数排序的特征
当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。
由于用...
分类:
其他好文 时间:
2014-05-09 21:05:32
阅读次数:
309
计数排序:它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法
实现原理: 首先将k范围内的数都C[]数组设0,然后遍历一边数组A[],对应的C[A[i]]++,
然后再将A[]数组向高位递加,观察发现每个不同的数字对应的C[]值都是该数字在排序后数组的位置,然后填充重复的数字
代码:
#include
#include
...
分类:
其他好文 时间:
2014-05-07 08:50:13
阅读次数:
254