数据结构中的排序算法分为比较排序,非比较排序。比较排序有插入排序、选择排序、交换排序、归并排序,非比较排序有计数排序、基数排序。下面是排序的具体分类:1.直接排序主要思想:使用两个指针,让一个指针从开始,另一个指针指向前一个指针的+1位置,两个数据进行比较voidI..
分类:
编程语言 时间:
2016-05-22 18:39:26
阅读次数:
282
基数排序与基数排序是两种非比较型排序。计数排序:
//************计数排序*********
//先最大-最小+1得到开辟空间数,开辟空间str,在遍历原数据arr在str相应位置计数,再遍历str将值写到原arr中
//适用在密集型数据,无重复最优可转化为位图
//时间复杂度O(N),空间复杂度O(..
分类:
编程语言 时间:
2016-05-22 18:37:27
阅读次数:
248
前言: 前面所讲的排序算法基本都是需要进行两个数依次比较,这种两个数依次比较的算法不依赖于数组重元素的特性并且有下界Ω(nlogn)。换句话说就是使用比较排序算法最快的时间消耗没法小于这个界。那么是不是我们永远没法跨越这个梗呢?答案当然不是,当数组中的元素有一定的特点的时候,我们就可以利用这个特定, ...
分类:
编程语言 时间:
2016-04-16 15:19:35
阅读次数:
262
非比较排序试用于元素比较集中的序列。1、计数排序找出待排序的数组中最大和最小的元素统计数组中每个值为i的元素出现的次数,存入数组C的第i项对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元..
分类:
编程语言 时间:
2016-04-11 07:35:02
阅读次数:
234
在前面的文章中,我们介绍的都是基于比较的排序。对于比较排序,对含n个元素的序列进行排序,在最坏情况下都要用O(n logn)次比较(归并排序和堆排序是渐近最优的)。本文将继续介绍以线性时间运行的排序算法,他们使用的是非比较排序,因此下界O(n logn)对它们不适用。计数排序想象下面这种情况:一个班有k个人,需要排成一条纵队,地面上已经用粉笔按从小到大的顺序标明了1到k个号码,要求按身高从低到高排列...
分类:
编程语言 时间:
2016-02-20 13:24:39
阅读次数:
193
比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比较排序)计数排序O(k+n)基数排序O() 第一节:用决策树分析比较排序的下界 决策树:倒数第二层满...
分类:
编程语言 时间:
2016-02-05 18:30:58
阅读次数:
229
比较排序的极限是O(nlgn)而计数排序非比较排序 他的复杂度只有O(n)基本思想是: 1、统计a数组中每个数字出现的次数放在临时数组c中,c的大小为a中最大的数 2、在第一步统计的基础上遍历一遍统计小于等于i的数出现的次数即c[i]+=c[i-1] 3、通过数组c确定a[i]的位置,放在结果...
分类:
编程语言 时间:
2015-05-20 20:17:57
阅读次数:
127