前面我们学习的几种排序算法都是基于比较的,对于任何输入数据他们都是适用的,其最坏的时间复杂度不会低于nlgn;
但对于一些比较特殊的输入数据,我们可以不采取比较的方法而是采用其它的方法对其进行排序,以达到线性的时间复杂度。下面就来介绍三种这样的算法:计数排序,基数排序,桶排序(因为这几种算法不常见,我只实现了计数排序,其它两种排序用伪代码表示)。一.计数排序
算法思想:给定n个位于0–k之...
分类:
编程语言 时间:
2015-03-13 18:46:59
阅读次数:
170
算法介绍桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(O(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。算法步骤如下:...
分类:
编程语言 时间:
2015-03-01 15:47:24
阅读次数:
208
给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法运算。
思路1:题目中说明,不能用除法,那一定是在相乘的时候,省略那一项,然后时间复杂度要0(n),就不能两层循环,而是要利用前面的相乘信息来降低复杂度。
算法:相似的分拆技术在数组题中。线性时间构造两个新数组,从开始遍历相乘 T1[0] =1,T1[i]=T[i-1]*A[i-1] ;而 T2从后往前遍历相乘 T2[len-1] =1,T2[i]...
分类:
编程语言 时间:
2015-02-26 23:06:04
阅读次数:
408
题目:在线性时间内非递归的求数组的最大连续子数组(连续和最大的子数组)。思路:设最大子数组的和为max,起点和终点位置为s、e,正在扫描的子数组的和为add,起点和终点位置为i、j。max的初始值为-∞。 1.若数组的值全为负,则返回最大值。 2.逐个扫描数组元素,更新add、i、j的值...
分类:
编程语言 时间:
2015-02-10 14:52:28
阅读次数:
204
#include #include #include #ifdef __linux
#include #include #endif void swap(int64_t* A, uint64_t i, uint64_t j)
{ int64_t tmp = A[i]; A[i] = A[j]; A[...
分类:
编程语言 时间:
2015-02-10 13:04:20
阅读次数:
235
在编程中,我们往往使用已有的数据结构无法解决问题,这是不必要急着创建新的数据结构,而是在已有数据结构的基础上添加新的字段。本节在上一次笔记红黑树这一基础数据结构上进行扩展,得出两个重要的应用—动态顺序统计和区间树。
动态顺序统计
在算法系列笔记2中我们在线性时间内完成了静态表的顺序统计,而这里我们在红黑树上进行扩展,在O(lgn)时间内完成该操作,主要包括返回第i
排名的元素o...
分类:
编程语言 时间:
2015-02-03 23:00:43
阅读次数:
342
问题:当给定存在静态表(如数组)中的n个元素,如何快速找到其中位数、最小值、最大值、第i小的数?
首先想到的方法是先对数组元素进行排序,然后找到第i小的元素。这样是可行的,但比较排序最快也需要O(nlgn),能否在线性时间内解决呢。这就是随机的分治法—随机选择。
思想:利用随机划分(在快速排序中介绍过)找到主元r,这样就将小于等于r的元素放在了其左边,大于r的元素放在了其右边。这...
分类:
编程语言 时间:
2015-02-02 23:09:19
阅读次数:
213
之前所学的排序都是基于比较的,通过两数的比较得出数的大小顺序,基于比较的算法最优的时间复杂度为n*lg(n)。而计数排序采用了另一种方式,没有比较,让人眼前一亮。但需要特定的环境下才能行。比如输入数组需要是0~k之间的整数。但他至少让排序能在线性时间O(n)内完成。基数排序弥补了计数排序排列大数时需...
分类:
编程语言 时间:
2015-01-31 07:05:59
阅读次数:
213
计数排序 是 线性时间的 排序算法,时间复杂度为O(n),虽然有一定的局限性。但是还是很好的一种算法。用2个数组进行额外的存储信息,数组 c[ ] 是对 数据中值相同的 记录下来,以便后面查阅;b[ ]是输出的有序数组,再将有序的数组输出。...
分类:
编程语言 时间:
2015-01-22 15:39:48
阅读次数:
187
引言本文来自于Google的一道题目:how to merge two binary search tree into balanced binary search tree.how to merge two binary search tree into balanced binary searc...
分类:
其他好文 时间:
2015-01-22 14:39:12
阅读次数:
207