摘要:
归并排序归并排序Table of Contents1 归并排序1.1 原理1.2 实现1.3 性能评估1 归并排序1.1 原理归并排序是Divide and Conquer思想,也就是分而治之。先看划分的子问题。假设对已经存在并且有序的两个序列A、B进行合并,如何进行?很显然可以新建一个序列C,长度是A与B长度之和,从左至右依次扫描A、B,将较小的项放入C直到A、B中所有元素都扫描结束即可。1.2 实现对于给定的数组A,A[p..r]与A[r+1..q]两部分均已有序,下面实现对此两部分合并,使A[p..q]最终有序。 void merge(int A[],int p,int r,int... 阅读全文
摘要:
原理 从形象开始,先看下面这一张图。 图 1:扑克牌理牌1 这是大家玩扑克牌的摸牌阶段,我们使用左手拿着已经摸到并排好大小的牌,右手从牌堆里边摸牌,每摸一张牌就将其插入到左手理顺的牌中,插入后保持其大小顺序。 再把这个过程抽象化,我们的扑克牌就是输入的待排序序列,两只手看成序列的两个部分。已经排序的和未排序的两部分,每次不断的从未排序的部分中取一个数,到已经排序的 部分中找到合适的位置插入。通常是自右向左依次比较来确定。实现 我们使用数组实现上面的过程。初始状态下,数组的首元素为已排序部分,从第二个元素开始插入排序。C语言的实现: 1 void insertSort(int A[]... 阅读全文