排序总结
Vas_Sago
这个作者很懒,什么都没留下…
展开
-
(四)堆排序
原理: 其实就是选择排序,不同的是用数据结构里的堆来代替线性表。 (1) 建堆 ( O(n) ) (2)取出堆顶放在已排序列最前,并调整复原堆 ( O(log n) )原创 2016-11-21 20:15:03 · 258 阅读 · 0 评论 -
(五)希尔排序
部分内容参考stoimen’s web log 希尔排序 ,也称 递减增量排序 ,是插入排序的一种更高效的改进版本。希尔排序是 *非* 稳定排序算法。 (1)将整个待排序列视为一个有宽度的矩阵,逐列各自进行排序 (2)缩小矩阵的宽度,再逐列各自排序 例如,假设有这样一组数[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],如果我们以步长为原创 2016-11-21 21:05:11 · 233 阅读 · 0 评论 -
(六)拓扑排序 *
将任务的先后顺序用有向图表示,图中顶点代表任务。如果它是有向无环图(DAG),则可以拓扑排序。 例如:完成A任务要先完成B,C任务;完成B任务要先完成D任务;完成D任务要先完成C任务。 图 A 我们的目的是连续执行任务。即我们拓扑排序的结果 图 B C--> D--> B--> A这样形成的一个任务序列,对任务有向图(图 A)的任意一条边(i, j),拓扑排序后(图B中)i 任务一原创 2016-11-22 10:58:18 · 447 阅读 · 0 评论 -
(三)快速排序
快速排序又称划分交换排序,也是采用分治的思想 (1) 从数列中挑出一个基准元素(pivot)。 (2)然后,所有比基准值小的放在 左边,所有比基准值大的放在 右边(相同的数可以到任一边)。然后将基准放在中间。 (3)分别在 左边 和 右边 的区间重复(2)操作。原创 2016-11-20 20:29:36 · 337 阅读 · 0 评论 -
(二)归并排序
A二路归并 递归法 归并排序愿原理: 该算法采用分治法(Divide and Conquer)先分后合 二路归并原理: 2个有序的序列,每次将他们最小的值做比较,把较小的拿出来放在第三个序列中。重复这个过程。如下图 void Merge(int* a,int lo,int hi){ int mid=(lo+ hi)>>1; int i=lo,j=mid+1,k=0;原创 2016-11-20 11:09:59 · 303 阅读 · 0 评论 -
(一)冒泡排序,插入排序,选择排序
统一接口:template <class T> void sort(int lo, int hi) { switch (rand()%5) { case 1: BubbleSort(lo,hi); break; case 2: SelectSort(lo,hi) break; break;原创 2016-11-18 20:55:01 · 345 阅读 · 0 评论 -
链表排序
struct node{ int val; node * next; node():next(NULL){} }; int main() { //输入链表的个数,和链表数据,并创建链表 node *head=NULL,*p=NULL; int len; cin>>len; for(int i=0;i<len;i++){原创 2017-06-24 19:11:40 · 370 阅读 · 0 评论