查找无序数组的中位数,要想时间复杂度为O(n)其实用计数排序就能很方便地实现,在此讨论使用快速排序进行定位的方法。 1、中位数定义 2、算法思想 3、Java代码实现 4、时间复杂度分析 5、附录 中位数一般两种定义: 第一种: 排序后数组的中间位置的值,如果数组的个数是偶数个,则返回排序后数组的第 ...
分类:
编程语言 时间:
2018-01-26 20:59:15
阅读次数:
241
一、计数排序 概要: 时间复杂度O(n),空间复杂度O(k),k是输入序列的值的范围(最大值-最小值),是稳定的。计数排序一般用于已知输入值的范围相对较小,比如给公司员工的身高体重信息排序。 思路: 输入数组A为{3,5,1,2,4,3},值的范围是1~5,所以创建5个桶,序号1,2,3,4,5。装 ...
分类:
编程语言 时间:
2018-01-17 13:42:45
阅读次数:
171
任何比较排序(归并排序,插入排序等等)的时间复杂度在最坏的情况下都需要做Ω(n * lgn)次比较,而这里的的计数排序由于它不是基于比较排序的思路,所以它的复杂度不收这个限制,它的时间复杂度为Θ(n),为线性时间。同时,计数排序一个重要的性质就是它是稳定的,也就是说,对于两个相同的数来说,在输入数组 ...
分类:
编程语言 时间:
2018-01-14 15:16:05
阅读次数:
216
public static int[] radixSort(int[] arr, int radix, int d){ //用于暂存元素 int[] temp = new int[arr.length]; //用于计数排序 int[] count = new int[radix]; int divi... ...
分类:
编程语言 时间:
2017-12-30 22:36:54
阅读次数:
189
1)插入排序(从第二个元素开始,依次从剩余元素中选择一个,插入到前面有序的子序列中) 2)快速排序(不是稳定的排序,平均时间复杂度O(nlogn)) 3)归并排序(是稳定的排序算法,时间复杂度O(nlogn)) 4)堆排序(不是稳定的排序,时间复杂度O(nlogn)) 5)计数排序、基数排序、桶排序 ...
分类:
编程语言 时间:
2017-12-20 21:54:33
阅读次数:
193
冒泡排序 插入排序 选择排序 希尔排序 归并排序 快速排序 堆排序 计数排序 基数排序 桶排序 O是指计算机执行命令所需的时间 nlogn是算法的时间复杂度,一般排序用的是log2n 总体总结表:这个有个错误就是归并排序需要一个o(n)的辅助数组 冒泡排序 主要思想:外层循环从1到n-1,内循环从当 ...
分类:
编程语言 时间:
2017-12-11 01:03:47
阅读次数:
378
查找方法 : 顺序查找法 二分查找法 1 import time,random 2 3 #时间计算 4 def cal_time(func): 5 def wrapper(*args,**kwargs): 6 time1=time.time() 7 n=func(*args,**kwargs) 8 ...
分类:
编程语言 时间:
2017-11-30 15:03:33
阅读次数:
179
1.冒泡排序 2.快速排序 3.插入排序 3.1希尔排序(插入排序的一种) 4.选择排序 5. 归并排序 6.堆排序 7.计数排序 8.基数排序 9.桶排序 ...
分类:
编程语言 时间:
2017-11-11 00:23:48
阅读次数:
276
预计分数:0实际分数:80 真的很 GG T1对于T1,一直没什么思路,然而就放弃了,这道题真的挺简单的,我们可以到着想,那么就是将末状态变为0的操作数,这就不难了,然后类似于计数排序的思想搞一就相当于利用一个桶就可以了。操作时,将费0数不断减1,将0变为当前0的个数/2下取整。这貌似是一个非常优秀 ...
分类:
其他好文 时间:
2017-10-31 22:24:53
阅读次数:
268