关闭

来自「Head First 设计模式」的程序设计原则(持续更新中)

设计原则: 第 1 个原则:找出应用之中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 第 2 个原则:针对接口编程,而不是针对实现编程。 第 3 个原则:多用组合,少用继承。...
阅读(342) 评论(0)

浅谈:模板方法模式(Template)

模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。...
阅读(224) 评论(0)

浅谈:单例设计模式(Singleton)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单点说,设计模式就是对问题行之有效的解决方式,是一种思想。单例设计模式就是保证一个类在内存中的对象唯一性。比如,在多个程序使用同一个配置对象信息时,就需要保证该对象的唯一性。...
阅读(278) 评论(0)

堆排序(HeapSort)

堆是一种重要的数据结构,分为大根堆和小根堆,是完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1),如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2,如果有父节点,父节点的位置是(n-1)/2取整。最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结点。...
阅读(362) 评论(2)

归并排序(MergeSort)

归并排序是建立在归并操作上的一种有效的排序算法,该算法和快速排序都是采用分治法来设计算法的,区别在于归并排序把数组分为两个基本等长(最多相差一个元素)的子数组,分别排好序之后还要进行归并操作,而快速排序在拆分子数组的时候则有所不同,其取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。...
阅读(284) 评论(0)

快速排序(QuickSort)

快速排序就是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动,其最坏的时间复杂度是O(n^2),其最优的时间复杂度是O(nlogn)。...
阅读(536) 评论(0)

插入排序(InsertSort)

对于一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到插入排序。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、元素个数加1的有序数组,算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法。...
阅读(440) 评论(1)

选择排序(SelectSort)

选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次,所以选择排序与冒泡排序相比时间消耗会更少,更有效率。...
阅读(324) 评论(0)

冒泡排序(BubbleSort)

冒泡排序是一种比较简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,因此得名。...
阅读(504) 评论(0)
    个人资料
    • 访问:268184次
    • 积分:6177
    • 等级:
    • 排名:第4031名
    • 原创:208篇
    • 转载:61篇
    • 译文:5篇
    • 评论:474条
    博主的 GitHub 账号
    GitHub : Charies Gavin

        欢迎大家在 GitHub 上Follow 博主,以及 Fork、Star、Watch 博主的项目。


      青春不老 奋斗不止


      好学若饥虚心若愚
    博客专栏