问题:当给定存在静态表(如数组)中的n个元素,如何快速找到其中位数、最小值、最大值、第i小的数?
首先想到的方法是先对数组元素进行排序,然后找到第i小的元素。这样是可行的,但比较排序最快也需要O(nlgn),能否在线性时间内解决呢。这就是随机的分治法—随机选择。
思想:利用随机划分(在快速排序中介绍过)找到主元r,这样就将小于等于r的元素放在了其左边,大于r的元素放在了其右边。这...
分类:
编程语言 时间:
2015-02-02 23:09:19
阅读次数:
213
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Compara.....
分类:
其他好文 时间:
2015-01-25 22:26:22
阅读次数:
235
Enumberable可枚举模块可以理解为对遍历搜索和比较排序集合的抽象。这个模块可以通过mixin为类提供两种能力:
1、可以遍历搜索
enum.all?{|object| block} 判断集合中是否所有元素都满足某条件
puts
[1,2,3,4].all?{|i| i>0} #true puts [1,2,3,4].all?{|i| i>3} #false
enu...
分类:
编程语言 时间:
2015-01-11 06:13:37
阅读次数:
190
接口Comparable和Comparator的区别和关系1).两者都是实现集合中元素的比较、排序;2).Comparable是集合内部定义方法实现排序,Comparator是集合外部实现排序3).Comparator接口在java.util下,Comparable接口在java.lang下; 通....
分类:
编程语言 时间:
2015-01-06 15:25:42
阅读次数:
189
奇偶排序,或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算。这是与冒泡排序特点类似的一种比较排序。
该算法中,通过比较数组中相邻的(奇-偶)位置数字对,如果该奇偶对是错误的顺序(第一个大于第二个),则交换。下一步重复该操作,但针对所有的(偶-奇)位置数字对。如此交替进行下去。
处理器数组的排序
在并行计算排序中,每个处理器对应处理一...
分类:
编程语言 时间:
2015-01-06 13:54:29
阅读次数:
225
一、概念: 1、自然排序法:即按自然数的大小排序,例如“10>2”; 2、计算机标准排序法:是以逐个字符比较,排序,例如“2>10”(因为第一位2>1); 3、数值数组:带有数字 ID 键的数组; 4、关联数组:带有指定的键的数组,每个键关联一个值。 5、默认的排序为按键值升序排序,排序方式为自然排...
分类:
编程语言 时间:
2015-01-04 17:04:57
阅读次数:
202
本文讲述的决策树和计数排序的基本原理和实现方法,欢迎拍砖!...
分类:
编程语言 时间:
2014-12-24 16:24:00
阅读次数:
229
/* date:2014.12.13
冒泡排序思路:交换排序,通过相邻数据的比较、交换来达到排序的目的。
流程:1).对数组中的各数据,依次比较相邻的两个元素的大小;
2).如果前面的数据大于后面的数据,就交换这两个数据,经过第一轮的多次比较排序后,便可把最小(或最大)的数据拍好;
3).再以同样的方式把剩下的数据逐个进行比较,直至(n-1次...
分类:
编程语言 时间:
2014-12-13 17:55:22
阅读次数:
156
1.对象如何对比排序?
Java的基本类型如int, float, double都可以直接使用java.util.Arrays.sort(Object[])对比排序,那对象是如何比较排序的呢?我们定义的类都是继承Object类的,Object类的equals的方法,默认是比较两个对象是否相等(hashcode相同)
public boolean equals(Object obj) {...
分类:
编程语言 时间:
2014-12-04 21:39:34
阅读次数:
344
各种排序方法的性能比较
排序方法
最好时间复杂度
平均时间复杂度
最坏时间复杂度
空间复杂度
稳定性
直接插入排序
O(n)
O(n2)
O(n2)
O(1)
稳定
简单选择排序
O(n2)
O(n2)
O(n2)
O(1)
不稳定
冒泡排序
O(n)
O(n2)
O(n2)
O(1)
稳定
希尔排序
-
...
分类:
编程语言 时间:
2014-11-29 20:15:57
阅读次数:
218