![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java算法
已经毕业的C先生
学得越多,越发现自己很菜,越是觉得时间不够用。
展开
-
Huffuman树
问题描述 Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。 2. 重复步骤1,直到{pi}...原创 2018-03-06 21:37:33 · 403 阅读 · 4 评论 -
八大排序算法解释及代码实现(JAVA)
不管是工作面试还是考研,算法是一个必考的知识点。趁着复习算法的热度,对算法进行归纳总结。希望对迷们有帮助。如有解释错误的地方,希望指出,感谢。 八大排序算法:希尔排序后续持续更新。...原创 2018-08-13 18:11:28 · 172 阅读 · 0 评论 -
八大排序算法 —— 希尔排序
希尔排序,又称缩减增量排序。核心思想:希尔排序是通过分组(拆半分组),通过组内排序,每次分组后分组间隔再一次拆半,一直循环下去,找到分组间隔gap=1,使用直接插入排序完成最后的排序。图解: 希尔排序的时间复杂度是:O(n2) ;空间复杂度是O(1) ,希尔排序是一个不稳定的排序,相同的变量在排序后可能与之前的顺序不一样。 比如:初始的数组为:6,7,5(1),9,1,2,4,...原创 2018-08-13 18:04:59 · 697 阅读 · 0 评论 -
八大排序算法 —— 基数算法
基数算法核心思想: 基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 图解: 注意:在排序之前要获取数组中的最大值,通过最大值获得数组...原创 2018-08-15 16:02:03 · 2413 阅读 · 1 评论 -
八大排序算法 —— 归并排序
归并排序归并算法的理解比较难,是一种区别于插入算法,选择算法和交换算法的一种独特算法,需要逐步理解。 核心思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案”修补”在一起,即分而治之)。图解(网...原创 2018-08-15 11:35:47 · 12449 阅读 · 8 评论 -
八大排序算法 —— 快速排序
快速排序核心思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。盗来一张图: 算法优缺点 快速排序最“快”的地方在于左右两边能够快速同时递归排序下去,所以最优的情况是基准值刚好取在无序区的中间,这样能够最大效率地让两边排序,同...原创 2018-08-15 10:23:41 · 775 阅读 · 0 评论 -
八大排序算法 —— 冒泡排序
冒泡排序核心思想:将临近的两个元素互相比较,将大的元素放在后面,依次循环下去,第一趟完成比较后,最大的元素会排在最后,第二趟后第二大的元素会排在倒数第二位,n-1趟后元素全部被排完。排序过程: 从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环)第一次两两比较6 > 2交换(内循环)交换前状态| 6 | 2 | 4 | 1 ...原创 2018-08-14 21:37:56 · 2570 阅读 · 0 评论 -
八大排序算法 —— 简单选择排序
简单插入排序算法代码实现 :import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int []data = new int[8]; for(int...原创 2018-08-14 21:07:43 · 671 阅读 · 0 评论 -
八大排序算法 —— 堆排序
堆排序堆的概念: 堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。堆排序: 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大...原创 2018-08-14 20:57:33 · 587 阅读 · 0 评论 -
高精度加法
问题描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。 计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则...原创 2018-03-05 20:05:47 · 157 阅读 · 0 评论 -
特殊回文数
问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式 输入一行,包含一个正整数n。 输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例输出 899998 989989 998899 数据规模和约定 1<...原创 2018-03-01 19:00:18 · 128 阅读 · 0 评论 -
十六进制转八进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数。*重点内容输入格式* 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输入对应的八进制正整数。 【注意】 输入的十六进制数不会有前导...原创 2018-03-01 17:26:21 · 183 阅读 · 0 评论 -
八大排序算法 —— 直接插入排序
直接插入排序核心思想:将所有的待排元素依次和已排元素进行比较,如果待排元素小于某个已排元素(从最小的已排元素开始比较),则将待排元素插入到该已排元素的前面。图解: 直接插入排序是最简单的插入排序,平均时间复杂度为:O(n2),空间复杂度是O(1)。算法代码实现:import java.util.*;public class Main { public stat...原创 2018-08-13 20:17:21 · 231 阅读 · 0 评论