随笔分类 -  算法

摘要:对于二分查找的bug 1)对于代码: 解决: 2)可用递归或迭代的方式实现: 递归比迭代在性能上略差,但差异仅是常数级别的。 二分搜索树 二分搜索树的优势: 高效 不仅可查找数据;还可以高效地插入,删除数据 - 动态维护数据 可以方便地回答很多数据之间的关系问题: min, max, floor, 阅读全文
posted @ 2018-03-20 17:34 小杜同学的嘚啵嘚 阅读(221) 评论(0) 推荐(0)
摘要:首先我们先来看一个由普通数组构建的普通堆。 然后我们通过前面的方法对它进行堆化(heapify),将其构建为最大堆。 结果是这样的: 对于我们所关心的这个数组而言,数组中的元素位置发生了改变。正是因为这些元素的位置发生了改变,我们才能将其构建为最大堆。 可是由于数组中元素位置的改变,我们将面临着几个 阅读全文
posted @ 2018-03-15 17:16 小杜同学的嘚啵嘚 阅读(3682) 评论(1) 推荐(0)
摘要:对于时间复杂度来说,快速排序的速度比较快。 一般系统级别的排序都是使用快速排序。对于有可能出现大量重复元素的情况,我们可以使用三路的快速排序。 归并排序必须开辟额外的空间完成归并的过程,才能完成归并排序。 快速排序虽然是在原地完成的排序,但它仍然需要log2n个额外空间。 这是因为我们在使用递归的方 阅读全文
posted @ 2018-03-15 16:13 小杜同学的嘚啵嘚 阅读(610) 评论(0) 推荐(0)
摘要:堆这种数据结构的一种典型应用——优先队列(Priority Queue) 普通队列:先进先出;后进后出。 优先队列:出队顺序和入队顺序无关;和优先级相关。 优先队列最典型的应用就是在计算机的操作系统中执行任务,当操作系统执行多个任务时,操作系统是将cpu的执行周期划成了多个时间片,在每个时间片里只能 阅读全文
posted @ 2018-03-14 15:25 小杜同学的嘚啵嘚 阅读(795) 评论(0) 推荐(0)
摘要:归并排序(MergeSort)和快速排序(QuickSort)都是用了分治算法思想。 所谓分治算法,顾名思义,就是分而治之,就是将原问题分割成同等结构的子问题,之后将子问题逐一解决后,原问题也就得到了解决。 同时,归并排序(MergeSort)和快速排序(QuickSort)也代表了两类分治算法的思 阅读全文
posted @ 2018-03-13 17:47 小杜同学的嘚啵嘚 阅读(3517) 评论(0) 推荐(0)
摘要:快速排序也属于“交换”类的排序。 核心思想可以概括为:通过多次划分操作实现排序。每一趟选择当前所有子序列中的一个关键字(通常是第一个)作为枢轴,将小于它的元素统统放到它的前面,大于它的统统放到它的后面。然后用这种方法去操作“被放在它前面的小于它的序列”和“被放在它后面的大于它的序列”。 具体实现方法 阅读全文
posted @ 2018-03-08 15:46 小杜同学的嘚啵嘚 阅读(443) 评论(0) 推荐(0)
摘要:“归并”的含义是将两个或者两个以上的有序表组合成一个新的有序表。 假设待排序表含有n个元素,则可以看成是n个有序的子表,每个子表的长度为1,然后两两归并,得到(n/2)或者(n/2+1)个长度为2或1的有序表;再两两归并。。。 如此重复,直到合并成一个长度为n的有序表为止。 这种方法称为二路归并排序 阅读全文
posted @ 2018-03-07 14:53 小杜同学的嘚啵嘚 阅读(472) 评论(0) 推荐(0)
摘要:折半插入排序思想和直接插入排序类似。 1)找到插入位置; 2)依次后移正确位置及后面的元素。 区别是查找插入位置的方法不同。 折半插入排序使用的折半查找法在一个已经有序的序列中找到查找位置。 注意,折半查找法的一个基本条件就是序列已经有序。 直接上代码: 阅读全文
posted @ 2018-03-06 18:38 小杜同学的嘚啵嘚 阅读(1750) 评论(0) 推荐(0)
摘要:直接上代码: 考虑一下,如果冒泡法在执行期间,执行到某个元素(不是最后一个元素),此时如果序列已经有序,那么算法会停下来吗?答案当然是否定的,只有遍历完整个待排序序列算法才会停下来。那么后面剩余元素的遍历就成了徒劳的浪费时间,因此,我们可以为我们的算法立个flag来标记一下,以确定它不会执行多余操作 阅读全文
posted @ 2018-03-06 16:44 小杜同学的嘚啵嘚 阅读(3305) 评论(0) 推荐(0)
摘要:直接插入算法:每趟将一个待排序的关键字按照其值的大小插入到已经排好的部分有序序列的适当位置上,直到所有待排序的关键字都被插入到有序序列中为止。 理论上,在直接插入排序中第二层循环是可以提前结束的,即某个元素在寻找自己合适位置时并未循环遍历到序列最前端。 这是直接插入排序和简单选择排序最大的不同。也是 阅读全文
posted @ 2018-03-06 15:37 小杜同学的嘚啵嘚 阅读(2259) 评论(0) 推荐(0)
摘要:简单选择排序采用最简单的选择方法,即在剩余序列中选出最小(或最大)的关键字,和剩余序列的第一个关键字交换位置,依次选择下去,直至使整个序列有序。 算法中两层循环的执行次数和初始序列没有关系,第二层循环每一次都需要遍历剩余带排序序列,故时间复杂度为O(n2) 直接上代码: 对于简单选择排序,一趟排序后 阅读全文
posted @ 2018-03-06 11:04 小杜同学的嘚啵嘚 阅读(4995) 评论(0) 推荐(0)