摘要: 使用类似快速排序的方法,找出第k小的元素。 k从0开始的。 使用了快速排序的部分函数 快速排序 //快速选择 template Comparable& quickSelect(vector& a, int left, int right, int k) { ... 阅读全文
posted @ 2017-01-11 22:26 肥宝游戏 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 快速排序(quicksort)是在实践中最快的已知排序算法。 平均运行时间是O(NlogN),最坏的情形是O(N^2) 算法之所以特别快,主要是由于非常精炼和高度优化的内部循环。 1.如果S中元素个数是0或1,则返回 2.取S中任一元素v,成为枢纽元(pivot) 3.将S-{v}(S中其余元素... 阅读全文
posted @ 2017-01-11 21:56 肥宝游戏 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 归并排序: 最坏情形是O(NlogN) 使用的比较次数几乎是最优的。 这个算法中基本操作是合并两个已排序的表。 归并排序通过递归,将数组自身分拆成2个数组,然后进入子数组的排序。 分拆的数组左右两个,必须是紧跟着的。 虽然归并排序的运行时间是O(NlogN),但是很难用于主存排序,主要问题在于合... 阅读全文
posted @ 2017-01-11 16:29 肥宝游戏 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 基本原理就是构建一个堆,然后删除根。 为了不用一个新的堆,把抽取出来的数据,放在堆末尾。 所以,要实现一个升序排序,就要构建一个最大堆,不停抽取最大数,放到末尾处。 //----------------堆排序-------------------- template void heapsor... 阅读全文
posted @ 2017-01-11 14:38 肥宝游戏 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 谢尔排序也叫缩减增量排序。 谢尔排序使用一个序列h1,h2,···,ht,叫做增量序列。有些增量序列对排序效率起到更好的效果。 template void shellSort(Vector& a) { for (int gap = a.size() / 2; gap > 0; gap /= ... 阅读全文
posted @ 2017-01-11 11:15 肥宝游戏 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 插入排序是最简单的排序算法之一。 插入排序由N-1趟(pass)排序组成。对于p = 1到N - 1趟,插入排序保证位置0到位置P上的元素为已排序状态。 //插入排序 template void insertionSort(Vector& a) { int j; for (int p = 1... 阅读全文
posted @ 2017-01-11 10:30 肥宝游戏 阅读(191) 评论(0) 推荐(0) 编辑