设计模式及算法
文章平均质量分 70
安正勋
点点滴滴,皆是学问,看到了、学会了、记住了,便是收获、便是进步。
展开
-
顺序查找(OrderSearch)
顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率比较低。原创 2016-11-07 18:20:32 · 1729 阅读 · 0 评论 -
二分查找(BinarySearch)
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。原创 2016-11-07 16:44:35 · 747 阅读 · 0 评论 -
详述「设计模式」及其 Java 实现
温馨提示:此项目的 GitHub 地址为「design-pattern」,欢迎感兴趣的同学Star、Fork,纠错。设计模式首先,我们来看看百度和维基百科对设计模式的解释:百度百科:设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。Wikipedia:A design pattern is the re-usable form of a solution to a原创 2017-10-18 18:05:56 · 3456 阅读 · 8 评论 -
浅谈:单例设计模式(Singleton)
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单点说,设计模式就是对问题行之有效的解决方式,是一种思想。单例设计模式就是保证一个类在内存中的对象唯一性。比如,在多个程序使用同一个配置对象信息时,就需要保证该对象的唯一性。原创 2017-01-04 22:46:03 · 1046 阅读 · 0 评论 -
浅谈:模板方法模式(Template)
模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。原创 2017-01-07 16:02:07 · 900 阅读 · 0 评论 -
冒泡排序(BubbleSort)
冒泡排序是一种比较简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,因此得名。原创 2016-11-08 10:40:29 · 3002 阅读 · 0 评论 -
选择排序(SelectSort)
选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次,所以选择排序与冒泡排序相比时间消耗会更少,更有效率。原创 2016-11-08 20:58:23 · 1056 阅读 · 0 评论 -
插入排序(InsertSort)
对于一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、元素个数加1的有序数组,算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法。原创 2016-11-09 14:08:29 · 1676 阅读 · 1 评论 -
快速排序(QuickSort)
快速排序就是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动,其最坏的时间复杂度是O(n^2),其最优的时间复杂度是O(nlogn)。原创 2016-11-10 13:32:24 · 1321 阅读 · 0 评论 -
归并排序(MergeSort)
归并排序是建立在归并操作上的一种有效的排序算法,该算法和快速排序都是采用分治法来设计算法的,区别在于归并排序把数组分为两个基本等长(最多相差一个元素)的子数组,分别排好序之后还要进行归并操作,而快速排序在拆分子数组的时候则有所不同,其取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。原创 2016-11-11 10:56:14 · 1107 阅读 · 0 评论 -
堆排序(HeapSort)
堆是一种重要的数据结构,分为大根堆和小根堆,是完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1),如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2,如果有父节点,父节点的位置是(n-1)/2取整。最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结点。原创 2016-11-12 06:09:03 · 1258 阅读 · 2 评论