查找与排序算法
heimu24
这个作者很懒,什么都没留下…
展开
-
【排序】希尔排序(Shell Sort)
希尔排序(Shell Sort) 原理:是在简单插入排序的基础上做的改进,简单插入排序使用的是默认间隔1,希尔排序使用了动态的增量间隔,来实现跳跃式的插入。 一次内循环实现基本有序(将较小的数字跳跃式的前移),或者可以理解为将相隔“增量”数字组成子序列,然后实现跳跃式移动 时间复杂度:O(n3/2)O({n^{3/2}})O(n3/2) import java.util.Arrays; publi...原创 2019-06-19 09:31:27 · 258 阅读 · 0 评论 -
【排序】堆排序(Heam Sort)
堆排序(Heap Sort) 原理:将数组构造成一个大顶锥,此时根节点就是最大值,然后将根节点值与末尾值交换,然后将剩余的n-1个元素重新构造成大顶锥,得到次最大值,如此反复执行即可 大顶锥:完全二叉树,节点值大于等于左右孩子,所以根节点是最大值。当前节点下标i,那么做孩子为2i,右孩子为2i+1。 堆调整函数思想:当前节点与左右孩子比较,取较大值进行交换。。然后向下比较子树。。最后使得当前节点的...原创 2019-06-19 11:35:27 · 365 阅读 · 0 评论 -
【排序】快速排序(Quick Sort)
快速排序(Quick Sort) 原理:通过一趟排序将待排序的数组分割成独立的两部分,其中一部分均比另部分小,然后分别对着两部分递归排序即可,最终达到排序目的 就是找到一个枢轴,然后枢轴左边的数字均小于该枢轴,右边的均大于该枢轴,然后对左右部分递归调用即可。本质上是冒泡法的升级,属于交换排序,只不过增大了移动和比较的距离,将大的数字从后面直接移动到后面,小的数字直接移动到前面。 时间复杂度:O(n...原创 2019-06-25 12:51:20 · 235 阅读 · 0 评论 -
【排序】冒泡排序(Bubble Sort)
冒泡排序(Bubble Sort) 基本思想:两两比较相邻的数字,如果反序就交换,直到没有反序为止 初级版: 思想:让每一个数字和它后面的每一个数字都进行比较,如果反序就交换 评价:并不是两两比较相邻记录,效率低,重复比较多次 import java.util.Arrays; public class test { public static void BubbleSort(int[] nums...原创 2019-06-18 12:01:15 · 656 阅读 · 0 评论 -
【排序】简单选择排序(Simple Selection Sort)
简单选择排序 思想:假如当前数字下标为i,那么从i后面的n-i个数字中选择最小值,如果该最小值比当前数字小,那么二者交换。 特点:比较次数多,交换次数少,只有找到最小值时才交换 import java.util.Arrays; public class test { public static void SelectSort(int[] nums) { for (int i = 0; i &...原创 2019-06-18 15:27:48 · 152 阅读 · 0 评论 -
【排序】直接插入排序(Straight Insertion Sort)
直接插入排序(Straight Insertion Sort) 思想:类似于玩扑克牌,插牌,认为第一个数字是有序的,从第二个数字开始,如果比当前数字小,那么该数字就应该插入到左边,依次类推,逐渐插入。注意:插入的时候是从i-1位置向左数,直到找到最后一个大于当前数字的数字,然后插入到前面一个位置即可。 算法复杂度:O(n2)O({n^2})O(n2),性能上略优于冒泡排序和简单选择排序 impor...原创 2019-06-18 16:21:49 · 276 阅读 · 0 评论 -
【排序】归并排序(Merging Sort)
归并排序(Merging sort) 原理:分治思想—如果一个数组有n个数据,则可以把这个数组看作n个有序的子序列,每个子序列的长度为1,然后两两归并,就能得到[n/2]个长度为2(或者1,落单的)的字序列,再不断地两两归并,直到得到一个长度为n的有序数组。 时间复杂度:O(nlogn){\rm{O}}(n\log n)O(nlogn) 参考链接 递归的归并排序 import java.util...原创 2019-06-24 11:08:34 · 184 阅读 · 0 评论 -
【排序】七大经典排序算法汇总
七大经典排序算法: 1、冒泡排序(Bubble Sort) 2、简单选择排序(Simple Selection Sort) 3、直接插入排序(Straight Insertion Sort) 4、希尔排序(Shell Sort) 5、堆排序(Heam Sort) 6、归并排序(Merging Sort) 7、快速排序(Quick Sort) ...原创 2019-07-03 10:43:20 · 146 阅读 · 0 评论 -
【查找】二分查找(Binary Search)
二分查找(Binary Search) 思想:在有序数组中,取中间数作为比较对象,如果查找值与中间数相等,则查找成功;如果查找值比中间数小,则在左半区间继续查找;如果查找值比中间数大,则继续在右半区间查找。不断重复上述过程,直到查找成功。 时间复杂度:O(logn)O(\log n)O(logn) PS:注意一下wihle循环条件为low<=high,注意还有等于号。举例,当nums中只有...原创 2019-07-06 16:30:50 · 223 阅读 · 0 评论