摘要: 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。通常堆是通过一维数组来实现的。在起始数组为 0 的情形中:父节点i的左子节点在位置 (2*i+1);父节点i的右子节点在位置... 阅读全文
posted @ 2014-04-29 14:44 AndyZeng 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 最直观的解法,排序之后取下标为k的值即可。但是此处采取的方法为类似快速排序分块的方法,利用一个支点将序列分为两个子序列(支点左边的值小于支点的值,支点右边大于等于支点的值)。如果支点下标等于k,则支点就是查找的值,如果支点的下标大于k,则在左子序列里继续寻找,如果支点下标小于k,则继续在支点右子序列... 阅读全文
posted @ 2014-04-27 23:43 AndyZeng 阅读(658) 评论(0) 推荐(0) 编辑
摘要: 查找输入序列中的最大最小数值,要求时间复杂度为1.5nC#实现如下:public class MinMaxFinder where T : IComparable { public void FindMinMax(T[] array, int startIndex, int en... 阅读全文
posted @ 2014-04-27 22:41 AndyZeng 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值小于等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。限制:所有值得取值范围不能太大,并且需要知道确切的取值范围。本算法需要的辅助空间要求较高。当输入的元素是 n ... 阅读全文
posted @ 2014-04-27 22:09 AndyZeng 阅读(610) 评论(0) 推荐(0) 编辑
摘要: 算法思想:分治法,把一个序列分成两个,其中一边的元素小于另一边的元素。一直这样分下去,直到只有一个元素的时候返回。然后回推往前看,所有的元素已经按大小归位。算法的难点在于将一个序列分成两列的过程,使得一边元素小于另一边,下面给予说明。设数组array对下标 leftIndex到rightIndex之... 阅读全文
posted @ 2014-04-23 23:42 AndyZeng 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 插入排序的思想是:1。假设第一个元素是有序的,理解这个有序是针对只有这一个元素。2。然后依次拿出后面元素插入到前面元素构成的有序序列里面(这个过程保证了算法的稳定性,因为遇到等于小于自己的时候就停止插入操作)。3。直到最后一个元素插入到插入到前面的有序序列,完毕。时间复杂度分析:假设数组有n个元素最... 阅读全文
posted @ 2014-04-23 22:09 AndyZeng 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 算法思想:排序数组内元素由小到大:1.每一趟从序列中选出最大的元素,然后与末尾的元素对调(决定了此排序是不稳定的,因为有可能把原位置元素调换到与和它等值的元素前面)。2.重复1的动作,把上一部调换到末尾的元素排除在外。3.当只剩下第一个元素时,排序完毕。时间复杂度:设共有n个元素最好情况,原来数组元... 阅读全文
posted @ 2014-04-23 21:35 AndyZeng 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序是基于比较的排序中比较基本的算法。以升序排序目的为例,算法的中心思想是从头至尾的比较两两相邻的元素,如果发现有反序(决定了稳定性)的则交换两个相邻元素。完成第一趟比较后最大的元素放到了最末端。第二趟从头至尾的比较不用比较最后一个元素(最大元素已经在最末端正确位置),所以比第一次少比较了一个元... 阅读全文
posted @ 2014-04-23 20:58 AndyZeng 阅读(420) 评论(0) 推荐(0) 编辑
摘要: 前面写过一篇关于轮廓算法的文章,是把合并建筑和合并轮廓是分开对待的,并且为了使轮廓合并的时候算法简单,对x坐标使用了double类型,然后对整形的x坐标数据进行合并。这样做是为了使得需找拐点的算法容易理解,遇到拐点的时候方便辨认。但是缺点也很明显:它对所有建筑的x坐标区间(MaxX-MinX)非常敏... 阅读全文
posted @ 2014-04-23 17:57 AndyZeng 阅读(2915) 评论(0) 推荐(0) 编辑
摘要: 寻找最大连续子序列给定一个实数序列X1,X2,...Xn(不需要是正数),寻找一个(连续的)子序列Xi,Xi+1,...Xj,使得其数值之和在所有的连续子序列数值之和中为最大。一般称这个子序列为最大子序列,例如,在序列(2,-3,1.5,-1,3,-2,-3,3)中,最大的子序列是(1.5,-1,3... 阅读全文
posted @ 2014-04-18 10:03 AndyZeng 阅读(867) 评论(0) 推荐(0) 编辑