
数据结构
数据结构
zhm_sky
Give it some time,you will turn the corner
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
(二分法进阶)三分法超详解
在使用二分法时必须保证数列是有序的,因此对应到数学问题上实际上解决的是单调函数的求解问题。通过二分法查找其中一个元素key,则转换为数学问题求f(x)=key的解。 但是一旦数列不是单调的,那么二分法就无法使用了,因为循环判断中不能确定左右区间的划分,于是对于函数有凹凸性的情况,便引入了三分法的使用场景。 欲求某个函数的极值点及极值,将区间[l,r]分为三部分,需要两个分界点m1和m2,如下 ...原创 2020-04-12 15:12:16 · 1987 阅读 · 0 评论 -
人人都会的二分查找——详解
对于二分法最容易混淆的点在边界的确定和判断条件。 我们知道数组表示为[0,length),为左闭右开区间,用l表示数组的左边界,r表示数组的右边界,即[l,r);于是mid=(l+r)/2表示二分中点。 首先要想查找到值,则数组不能为空,于是有r>l+1,则二分循环条件应为while(r>l+1)。 其次对于循环中的判断条件,即arr[mid]和key的大小比较,有三种: 第一:ar...原创 2020-04-12 00:12:33 · 241 阅读 · 0 评论 -
排序算法六:快速排序
排序效率在同为O(N*logN)的几种排序方法中效率较高 思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 平均时间复杂度: nlog2n ,空间复杂度: log2n,不稳定 public class QuickSort { ...原创 2020-02-28 21:51:57 · 233 阅读 · 0 评论 -
排序算法五:归并排序
效率仅次于快排的一种排序算法, 一般用于对总体无序,但是各子项相对有序的数列 思想: 采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序 平均时间复杂度为 nlog2n ,空间复杂度为n,稳定 public class Merge { /** * 对数组进行排序 * @param arr:要排序的数组...原创 2020-02-28 21:49:45 · 235 阅读 · 0 评论 -
排序算法四:希尔排序
基于插入排序的改进版,效率更高 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 平均时间复杂度:O( n1.3 ),空间复杂度:1,不稳 分组间隔一般取数组长度的1/2,然后再一直折半,在工程中...原创 2020-02-28 21:46:56 · 190 阅读 · 0 评论 -
排序算法三:插入排序
简单排序中最好用且稳定,比选择,冒泡的效率高 对于样本小且基本有序的时候效率比较高 思想: 每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 平均时间复杂度:O(n²),空间复杂度:1,稳定 基础版: public class Insertion { public void insertion(){ int[] ar...原创 2020-02-28 21:44:23 · 124 阅读 · 0 评论 -
排序算法二:冒泡排序
基本不用,效率太低,但是很常见 思想: 让数组当中相邻的两个数进行比较,数组当中比较小的数值向下沉,数值比较大的向上浮!外层for循环控制循环次数,内层for循环控制相邻的两个元素进行比较。 平均时间复杂度:O(n²), 空间复杂度:1, 稳定 import jdk.internal.dynalink.beans.StaticClass; import javax.sound.midi....原创 2020-02-28 21:40:05 · 139 阅读 · 0 评论 -
排序算法一:选择排序
最简单也最没用的一种算法,时间复杂度为O(n²),而且不稳定,工程中一般不用… 思想:指定一个当前最小数(一般选第一个数),记录其下标为minpos,将它与后面的每一个数依次比较,若有数小于当前最小数,则交换两者的下标,并交换两个数的位置,重复上述步骤直到排好序 平均时间复杂度:O(n²),空间复杂度:1,不稳定 public class Test { public static v...原创 2020-02-28 21:36:45 · 165 阅读 · 0 评论 -
常见排序列表
中文名称英文名 称平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度稳定性选择排 序 Selectionn²n²n21不稳冒泡排序Bubblen²n²n1稳插入排序Insertionn²n²n1稳堆排序heapnlog2nnlog2nnlog2n1不稳希尔排序shelln1.3n2n1不稳归并排序Mergenlog2nnlog2nnlog2nn稳快速排序Quicknlog2nn2nlog2n...原创 2020-02-28 21:30:58 · 541 阅读 · 3 评论