问题 给定N个元素的数组,求第k大的数. 特例当k=0时,就是求最大值,当k=N-1时,就是求最小值. 应用顺序统计求top N排行榜 基本思想 使用快速排序方法中的分区思想,使得a[k]左侧没有更小的数,右侧没有更大的数 性能 快速选择算法的复杂度是N. 最坏情况下的复杂度是1/2N^2,但是可以通过预先洗牌来防止出现最坏情况 public static Comparable select(Comparable[] a, int k) { StdRandom.shuffle(a); int l…
计算复杂度(Computational complexity):用于研究解决特定问题X的算法效率的框架 计算模型(Model of computation):可允许的操作(Allowable operations) 成本模型(Cost model):操作数(Operation counts) 复杂度上界(Upper bound):保证能在一定的时间内解决 复杂度下界(Lower bound):通过数学方法证明,必须花费的最少时间 最优算法(Optimal algorithm):可能达到的最小复杂…
发明者:Sir Charles Antony Richard Hoare 基本思想: 先对数据进行洗牌(Shuffle the array) 以数据a[j]为中心进行分区(Partition),使得a[j]左侧的数据都小于等于a[j],a[j]右侧的数据都大于等于a[j] 分区完后递归排序 分区演示(partitioning demo) 重复操作指导i和j指针相遇 当a[i] < a[lo]时,令i从左往右扫描 当a[j] > a[lo]时,令j从右往左扫描 交换a[i]和a[j] 当指针相遇…
起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each half) 合并两个部分(Merge two halves) 归并排序体现的是一种分治思想(Divide and conquer) 演示: 1. 给出原数组a[],该数组的lo到mid,mid+1到hi的子数组是各自有序的. 2. 将数组复制到辅助数组(auxiliary array)中,给两部分的首元…
排序算法有着广泛的应用 典型的应用: 排序名称 排序MP3音乐文件 显示Google的网页排名的搜索结果 按标题顺序列出RSS订阅 排序之后下列问题就变得非常简单了 找出中位数(median) 找出统计数据中的异常值 数据库中的二分查找 在邮箱中找出重复的邮件 不是特别典型的应用: 数据压缩 计算机图形 计算生物 负载平衡 Java系统排序(System sorts) Arrays.sort(). 有不同的方法对应不同的基本类型 有一个实现Comparable接口的方法 有一个使用Compara…
很多时候排序是为了对数据进行归类,这种排序重复值特别多 通过年龄统计人口 删除邮件列表里的重复邮件 通过大学对求职者进行排序 若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路快排就没有这样的问题. 归并排序对重复数据排序的比较在1/2NlgN和NlgN之间 三路快排 目标:将数据分成三个区间(3-way partitioning) lt和gt区间内的元素都和比较元素v相等 lt左边的元素都比v小 gt右边的元素都比v大 性能 三路快排的复杂度比普通快排小,主要取决于数据…
稳定性(Stability):先按性质A排序,再按性质B排序,性质B相同的那些项是否仍然是按性质A排序的? 一个稳定的排序,相同值的元素应仍保持相对顺序(relative order) 稳定的算法:插入排序.Mergesort等 不稳定的算法:选择排序:Shellsort等…
要熟练掌握比较器Comparator public final Comparator<T> MY_COMPARATOR = new myComparator(); //定义比较器 ..... public int comparaTo(T t){ ..... } private class myComparator implements Comparator<T>{ public int compare(T v, T w){ return v.comparaTo(w) //compa…
比较器接口(Comparator interface):用可选顺序(alternate order)进行排序 public interface Comparator<key> int compare(Key v, Key w) //比较元素v和w 示例: Java系统排序(java system sort) 创建Comparator对象(Create Comparator object) 向Array.sort()传递第二参数 String[] a; ... Arrays.sort(); //…
网友笔记参考 果壳Mooc首页 revilwang的专栏 白色咖啡 Weiran Liu的渣技术小专栏 Bug表:http://findbugs.sourceforge.net/bugDescriptions.html 老师提供的包:http://introcs.cs.princeton.edu/java/stdlib/ 课本Textbook :http://algs4.cs.princeton.edu/home/…