算法
qq_21150865
这个作者很懒,什么都没留下…
展开
-
经典汉诺塔递归算法
/** * 经典汉诺塔递归算法 */package Suanfa;import java.util.Scanner;/** * @author 16026 * */public class Hanoi { public void hanoi(int n, char x, char y, char z) { if (n == 1) { Sy原创 2017-02-20 17:00:37 · 495 阅读 · 0 评论 -
一遍记住Java常用的八种排序算法与代码实现
一遍记住Java常用的八种排序算法与代码实现转载 2017-03-13 21:35:20 · 303 阅读 · 0 评论 -
java实现归并排序算法
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 第二步:设定原创 2017-03-13 15:13:10 · 5043 阅读 · 1 评论 -
Java实现堆排序算法
堆是一种重要的数据结构,为一棵完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1),如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2。分为最大堆和最小堆,最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结点。所谓堆排序就是利用堆这种数据结构来对数组排序,我们使用的是最大堆。处理的思想和冒泡排序,选择原创 2017-03-12 21:22:44 · 326 阅读 · 0 评论 -
Java实现约瑟夫环问题
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。/** * @author 16026 * */import java.util.ArrayList;import java.util.List;原创 2017-03-05 14:48:34 · 35204 阅读 · 5 评论 -
Java求一个整数的二进制中1的个数
常规解法。 思路:将整数n与1进行与运算,当整数n最低位是1时,则结果非零,否则结果为0。 然后将1左移一位,继续与n进行与运算,当次低位是1时,结果非零,否则结果为0。 循环以上操作,记录非零的次数即可。 代码如下: public static int times1(int n ){ int count = 0;原创 2017-02-25 17:10:54 · 6628 阅读 · 1 评论 -
Java斐波那契数列
斐波那契数列定义如下: 当n=0时,f(0) = 0; 当n=1时,f(1) = 1; 当n>1时,f(n) = f(n-1)+f(n-2); 下面分别演示递归算法和非递归算法: 1.递归算法 public static int fibonacci(int n) throws Exception { if (n < 0) throw new E原创 2017-02-25 14:07:53 · 708 阅读 · 0 评论 -
Java直接插入排序算法
原理:从第二个元素开始,依次跟前面元素进行比较,将其插入合适的位置并使其依然有序。import java.util.Arrays;/** * 直接插入排序算法 * *//** * @author 16026 * */public class DirectInsertSort { public static void sort(int[] array) { in原创 2017-02-24 11:16:49 · 229 阅读 · 0 评论 -
Java直接选择排序
直接选择排序(Straight Selection Sort)思想是:在第1趟中,从n个记录中找出关键字值最小的记录与第一个记录进行交换;再第2趟中,从第2个记录开始的n-1个记录中再选出关键字最小的记录与第二个记录交换1;以此类推,在第i趟中,从第i个记录开始的n-i+1个记录中选出关键字最小的记录与第i个记录交换,直到整个序列按关键字值有序为止。import java.util.Arrays;/原创 2017-02-24 13:49:41 · 1397 阅读 · 1 评论 -
Java快速排序算法
快速排序的基本思想是通过一趟排序将要排序的记录分割成独立的两个部分,其中一部分的所有记录的关键字都比另外一部分的所有记录关键字值小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个记录序列变成有序。import java.util.Arrays;/** * 快速排序算法 *//** * @author 16026 * */public class Qu原创 2017-02-24 11:31:53 · 372 阅读 · 0 评论 -
Java求旋转数组的最小值
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。可以借助二分查找法的思想。/** * @author 16026 * */public class Min {原创 2017-02-24 11:23:56 · 409 阅读 · 0 评论 -
Java实现交换排序 之 冒泡排序和快速排序
Java实现交换排序 之 冒泡排序和快速排序冒泡排序import java.util.Arrays;/** * 冒泡排序算法 *//** * @author 16026 * */public class BubbleSort { /** * 冒泡排序 * * @param array * 输入一个无序整型数组 */ st原创 2017-02-22 14:17:55 · 478 阅读 · 0 评论 -
Java用两个队列实现一个栈的功能
<用两个队列实现一个栈的功能> 入栈:将元素进队列A 出栈:判断队列A红元素的个数是否为1,如果等于1,则出队列,否则将队列A中的元素,以此出队列并放入队列B,知道队列A中的元素留下一个,然后队列A出队列,再把,队列B中的元素出队列以此放入队列A中。import java.util.*;/** * 用两个队列来实现一个栈,完成栈的Push和Pop操作。 *//** * @author wa原创 2017-02-22 12:46:37 · 2457 阅读 · 0 评论 -
Java两个栈来实现一个队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 <分析> <用两个栈实现一个队列的功能> 入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;如果不为空,栈B直接出栈。import java.util.*;/** * 用两个栈来实现一个队列,完成队列的Push和Pop操作。 *//** * @author 16026原创 2017-02-22 12:44:41 · 280 阅读 · 0 评论 -
Sunday字符串匹配算法
Sunday字符串匹配算法本来在看KMP算法来着,可是实在是复杂,晦涩难懂,看别人博客了解到KMP算法不仅复杂难懂,效率也不算太高,所以果断抛弃,了解到有其他更高效的算法,如BM算法,但是还有一种更高效的算法–Sunday算法。Sunday算法的原理很简单,简单高效,这才是我们需要的。手写描述,不喜勿喷哈哈。package Suanfa;public class Sunday { publi原创 2017-02-20 23:06:36 · 386 阅读 · 0 评论 -
Brute-Force模式匹配算法
Brute-Force模式匹配算法是一种简单易理解的算法,效率较低,优化的KMP算法见另一篇博客。/** * Brute-Force模式匹配算法 */package Suanfa;/** * * @author 16026 * */public class BFMatch { public static int match(String src, String...原创 2017-02-20 17:02:28 · 1155 阅读 · 0 评论 -
Java实现单链表翻转
Java实现单链表反转,递归和非递归两种形式/** * 反转单链表 *//** * 定义链表 * * @author 16026 * */class Node { int val; Node next; public Node(int val) { this.val = val; }}public class ReverseList原创 2017-03-24 13:24:17 · 309 阅读 · 0 评论