
算法
哈希Map
这个作者很懒,什么都没留下…
展开
-
选择排序 - 直接选择排序
直接选择排序思路很简单,就是不停的拿当前假设的最小值与后面的元素对比,如果对比值更小,就交换位置。它需要经过N-1趟比较。 每轮都会将本轮最小值放在最前面,直至游标移动至最后一位。package com.h3c.paixu;public class 直接排序Demo { public static void main(String[] args) {原创 2013-02-10 13:37:48 · 1266 阅读 · 0 评论 -
逆向思维求解质数
质数即大于1的一个自然数,这个数可以被1和自身整除,如算出100之内的质数,它们有2,3,5,7,11,13,17,19...这样的数字。这道题也是面试过程中笔试常问的一道题。普通青年正向求解:public static void main(String[] args) { ArrayList zhishu = new ArrayList();原创 2013-10-28 11:46:18 · 1463 阅读 · 0 评论 -
加密算法说明(Base64、MD5)
A). Base64Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最转载 2013-03-26 14:10:19 · 1421 阅读 · 0 评论 -
插入排序——折半插入排序
折半插入排序是直接插入排序的一种优化,他利用了直接插入排序中前面的元素已经完成排序的特点进行折中对比。他的效果与直接插入排序一样,但是速度更快。 package com.h3c.paixu;public class 折半排序Demo { public static void main(String[] args) { // 1. 初始化一个无序数组 int[] myArr原创 2013-02-15 15:58:23 · 1777 阅读 · 0 评论 -
插入排序——直接插入排序
直接插入排序比较傻,这里不做过多的介绍。原理就是在本数组中让比自己大的元素往后挪至自己的位置,自己往前挤。package com.h3c.paixu;public class 直接插入排序Demo { public static void main(String[] args) { // 1. 初始化一个无序数组 int[] myArr = { 23, 35, 73, 27,原创 2013-02-14 23:34:43 · 1050 阅读 · 0 评论 -
选择排序——快速排序
快速排序是一个速度非常快的交换排序方式,他的实现思路就是选取一个元素作为分界值,将数组小于分界值的元素排列在左边,大于分界值的元素排列在右边。然后多次递归后得出完成排序的数组。 package com.h3c.paixu;public class 快速排序Demo { public static void main(String[] args) { // 1. 初始化原创 2013-02-12 17:25:43 · 3543 阅读 · 0 评论 -
交换排序——冒泡排序
冒泡排序是一种广为人知的排序算法,因为它相对于前面介绍的选择排序来说效率有所提升,而且实现简单。最好情况下只需要1次比较,最差需要(n-1)次比较。 实现思路就是不停的使数组中相邻的左右两个元素对比大小,将大的元素往右挪。因为是左右互换,所以每轮比较下来后方的元素均以排序,所以可以提供了可以提前结束排序的机会。 package com.h3c.paixu;publi原创 2013-02-11 22:50:37 · 2356 阅读 · 2 评论 -
选择排序——堆排序
堆排序采用二叉树结构组合数据,有大顶堆和小顶堆两种。堆排序的原理就是通过叶子节点与父节点的对比挪位,将最小或最大值挪至树顶;再将其排出后重复该动作,因此分为两步:1.建堆 2.排除堆顶二叉树父节点索引值:(k - 1) / 2 子节点索引值:2 * k + 1、2 * k + 2package com.h3c.paixu;public cl原创 2013-02-10 17:38:08 · 1316 阅读 · 0 评论 -
各种排序算法的特点,时间复杂度,稳定性等
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复转载 2013-02-15 16:20:17 · 1146 阅读 · 0 评论 -
约瑟夫环算法
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。2B求解: private void myJosf(int teamLength, int baoshu) { int[]原创 2013-10-28 17:18:03 · 2230 阅读 · 0 评论