java算法
对算法的java语言实现
SmilngCobra
To be an architect
展开
-
算法排序----归并排序法
归并排序法,实际上也是分治法的一个范例。主要的思路分为三步: 1.将序列分为两个子序列。 2.对这两个子序列分别进行归并排序,即一直拆分到只有一个元素。 3.完成排序后将两个小的子序列进行合并。下面我来根据我的代码来进行测试public int[] mergeSort(int[] array){ domergeSort(array,0,array.length-1...原创 2018-07-26 09:10:15 · 210 阅读 · 0 评论 -
算法排序----二分排序法
现在我来简单叙述一下二分法排序的思想,在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。实际上我们看到,这是用一种方式来查找最合适的数值应该插入的位置。这个和快速排序有些相像之处但是也不完全相同。它实际上也是...原创 2018-06-09 11:25:35 · 47109 阅读 · 4 评论 -
算法排序----快速排序法
首先我来说一说快速排序算法的核心思想。这是我在百科上找到的官方定义:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。我来具体解释一下,实际上我们排序的目的就是为了让左侧的值比右侧的值小,那么我们就可以取一个基准值。这个基准值我们可以把它当做是一个序...原创 2018-06-06 23:01:11 · 9782 阅读 · 0 评论 -
算法排序----希尔排序法
现在我来讲述一下希尔排序法。希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。什么是增量呢,就是数组中一个元素和其下标加上这个增量值的元素进行对比。这个就是增量。比如说,如果增量是6,那么就是a[0]和a[6]元素进行对比。增量的初始值我们可以设计成为数组长度的一半。然后依次递减。主体思想就是这个,希尔排序法的思想非常容易理解。但是是一个不稳定算法...原创 2018-06-02 19:10:47 · 566 阅读 · 0 评论 -
算法排序----堆排序法
以上三种排序实际上有很多相似之处,实际上都类似于插入排序,将元素和相邻元素或者一定距离元素进行比较,最终找到其合适位置。因此时间复杂度都为O(n²)或者O(n1.3).那么接下来我将叙述一种算法,它是利用堆的思想进行排序的。首先,堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。那么我们的堆排序用的就是...原创 2018-06-02 20:24:07 · 505 阅读 · 0 评论 -
算法排序----冒泡排序法
接下来我将用几篇文章来讲述关于算法排序的思想,首先是最简单的冒泡排序法。它适用于所有的情况,时间复杂度较大为O(n²)。那么我将用图示和代码来解释这个算法。首先,冒泡排序法的思想就是将最大值或者最小值置于最上方或者最下方。那么我们需要两个for循环,第一个for循环中每一次循环的结果是将未排序的部分的最大值或者最小值找出。那么这个循环中的内循环就是来执行这个工作的。以图为例,一个具有n个数的数组,...原创 2018-06-02 18:31:41 · 695 阅读 · 0 评论 -
算法排序----插入排序法
接下来我来讲述一下插入排序法。首先来解释一下插入排序法的原理,它的原理是每插入一个数都要将它和之前的已经完成排序的序列进行重新排序,也就是要找到新插入的数对应原序列中的位置。那么也就是说,每次插入一个数都要对原来排序好的那部分序列进行重新的排序,时间复杂度同样为O(n²)。 这种算法是稳定的排序方法。下面我用一个图来解释一下首先这是一个未经排序的数组我们要做的从a[1]开始,至于为什么不是a[0]...原创 2018-06-02 18:59:50 · 43258 阅读 · 16 评论