小和问题、逆序对问题
摘要:面试常考:归并排序的思想(分治) import java.util.Arrays; //小和问题 public class SmallSort { public static void main(String[] args) { int[] arr = {1,3,4,2,5}; System.out.println(Arrays.toString(ar...
阅读全文
posted @
2019-05-05 20:52
源格
阅读(166)
推荐(0)
八大基本排序--堆排序
摘要:预备知识:顺序存储的二叉树 一.顺序存储二叉树的性质 1. 第n个元素的左子节点:2*n+1 2. 第n个元素的右子节点:2*n+2 3. 第n个元素的父节点:(n-1)/2 二.顺序存储二叉树的遍历 堆排序:利用堆这种数据结构 堆分为:大顶堆、小顶堆 大顶堆:父节点永远都大于它的任何一个子节点(不论是左子节点还是右子节点) 升序排列使用:大顶堆 降序排列使用:小顶堆 把数组画成一颗完全二叉树...
阅读全文
posted @
2019-04-18 11:39
源格
阅读(511)
推荐(0)
八大基本排序--基数排序
摘要:原数组和桶如下: 第一次按照个位排序如下 取出的时候按照从0~9的顺序,且同一个桶中,先放进去的先出来 第二次按照十位排序如下 取出结果如下 第三次次按照百位排序如下 取出结果如下: 此时数组已经有序了 代码思路: 我们排序的次数取决于数组中最大是数字的位数 import java.util.Arrays; //基数排序 public class RadixSort { ...
阅读全文
posted @
2019-04-07 21:26
源格
阅读(270)
推荐(0)
八大基本排序--归并排序
摘要:和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 代码思路如下
阅读全文
posted @
2019-04-01 17:26
源格
阅读(112)
推荐(0)
八大基本排序--选择排序
摘要:首先在未排序序列中找到最小的元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小的元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 第0次排序 首先认为4最小,然后依次比较 找到最小值1 由于是第0次排序,把找到的最小值1跟第0个数字交换位置 然后开始第1次排序,【再从未排序的数字中找到最小的值与第1个数字交换】 import java.u...
阅读全文
posted @
2019-04-01 14:35
源格
阅读(160)
推荐(0)
八大基本排序--希尔排序
摘要:希尔排序需要选择一个增量序列,通常选为数组长度/2 代码如下: 输出
阅读全文
posted @
2019-04-01 08:44
源格
阅读(116)
推荐(0)
八大基本排序--插入排序
摘要:在遍历某一个数字的时候,认为前面的数据都是已经排好序了的,挨个跟前面的数字比较,在合适的地方插入这个数据 从第2个数开始排序就可以 原理演示如下: 3比5小,则交换顺序 4比5小,4跟5交换位置 4比3大,则插入原来5所在的位置 7比5大,则下标直接后移 1比7小,7向后移1位 1比5小,5向后移1位 1比4小,4向后移1位 1比3小,3向后移1位 到头了,把1赋给第一...
阅读全文
posted @
2019-03-31 17:04
源格
阅读(189)
推荐(0)
八大基本排序--冒泡排序
摘要:面试中需要手写频率最高的一个排序,也是最简单 冒泡排序就是两两比较,把最大的放到最后面 一开始扫过N个数、然后扫过N-1个数...等差数列 时间复杂度O(n^2): 可以通过增加一个附加标记来优化该算法
阅读全文
posted @
2019-03-30 20:00
源格
阅读(168)
推荐(0)
汉诺塔
摘要:汉诺塔是一个经典的递归问题 实际上每次只需要考虑最下面的盘子,和除最下面以外所有的盘子(递归) //汉诺塔 public class HanioDemo { public static void main(String[] args) { char from = 'A'; char mid = 'B'; char end = 'C'; ...
阅读全文
posted @
2019-03-30 15:40
源格
阅读(147)
推荐(0)
手写斐波那契数列
摘要:斐波那契数列:前两个值是1(固定的),后面的数字是其前面两个数字的和 是典型的递归思想 注意开始项为第一项 //斐波那契数列 public class FebonacciDemo { public static void main(String[] args) { //1 1 2 3 5 8 13 21 int res = FebonacciDemo.fe...
阅读全文
posted @
2019-03-30 09:33
源格
阅读(227)
推荐(0)
【java】String类常见操作
摘要:秋招做题需要,总结String类常用api如下: 简单的:str.length()、str.isEmpty()、str.split(“;”)切割 1.字符串反转:借助StringBuilder/StringBuffer,(常用StringBuilder类,因为快) 2.截取字符串:substring
阅读全文
posted @
2019-03-29 19:28
源格
阅读(747)
推荐(0)