算法
文章平均质量分 61
无涯有涯
这个作者很懒,什么都没留下…
展开
-
归并算法--MergeSort
三国有云:天下大势分久必合,合久必分。 归并算法就充分表象了这一点,归并算法的基本思想就先将大数组分成小数组,再将小数组分成可以比较大小的两元数组,之后就是合的过程;合的过程中是要对元素进行排序的,两个较小的数组各元素比较后重新排序,再添加到大的数组上,直到合并完成。还是有图好分析问题: 百度了一下归并算法,里面只描述归并算法的下半部分,其实分的过程也挺重要,如果不分到最底层,就合得到的结果原创 2016-03-28 21:36:30 · 355 阅读 · 0 评论 -
希尔排序--ShellSort
希尔排序是插入排序的一种,在进行算法编写的时候会多次调用到插入排序。希尔排序的核心点就是缩小增量级。 那么怎么去缩小增量级呢? 通常都是用数组的长度除二得到第一增量级first(array.length/2),然后通过first/=2去循环得到其他的增量级,直到增量级等于一。当然取增量级的方式不尽相同,当根据具体的情况而定。为了清晰的表述,算法的具体思想,我习惯通过图的方式去理解,这样思路会变的原创 2016-03-23 10:27:28 · 294 阅读 · 0 评论 -
选择排序--SelectSort
选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。 具体的流程如图: 具体代码实现:public class SelectSort implements Sort { public void sort(int[] data) { for (int i = 0; i < data.length; i++)原创 2016-03-19 00:21:55 · 308 阅读 · 0 评论 -
改进后的快速排序--ImprovedQuickSort
对于快速排序的改进,通常可以从以下几个方面入手 1、切换到插入排序。当数组比较小,插入排序性能要优于快速排序 2、三取样切分。使用子数组的一小部分元素的中位数来切分数组。 3、三向切分。将数组切分成三个部分,分别对应小于、等于和大于切分元素的数组。 三向切分的具体实现步骤 1、选取随机数作为枢轴。 2、使用左端,右端和中心的中值做为枢轴元。 3、每次选取数据集中的中位数做枢轴。原创 2016-03-13 11:13:56 · 390 阅读 · 0 评论 -
快速排序--QuickSort
快速排序是对冒泡排序的一种改良。它的基本思想是:通过一趟排序将要排序的数据分割成两个独立的部分,其中一部分的所有数据都比另一个部分的所有数据小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 一趟快速排序的算法是: 1)设置两个变量low、hight,排序开始的时候:low=0,hight=N-1; 2)以第一个数组元素作原创 2016-03-11 20:37:54 · 353 阅读 · 0 评论 -
冒泡排序--BubbleSort
冒泡书法的操作步骤: 1、比较相邻的元素;如果第一个比第二个大,就交换他们; 2、对每一个相邻元素做同样对的工作,从开始第一对到结尾最后一对。在这一点,最后的元素应该会是最大的数 3、针对所有元素重复以上的步骤,除了最后一个。 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 冒泡排序的时间复杂度:冒泡排序总的平均时间复杂度为 J原创 2016-03-08 23:20:00 · 403 阅读 · 0 评论 -
算法学习----->Insertsort(插入排序)
开启算法学习模式,我想看看在这条路上我能坚持多久,每天学习一点点算法,看看做到什么程度才能与现在有所不同。 每天的学习任务我也不想搞得太多,能学习多少就写多少算法博客,今天就学习了Insertsort----->插入排序 首先简单的理解一下插入排序的基本思想: 一个混乱的排列,首先让它的第二项与第一项排序得到一个有序的排列; 然后从混乱的队列中抽取第三项,在于已经排序好的排列中的每一项比较原创 2016-02-29 22:48:12 · 416 阅读 · 0 评论