
数据结构、算法和设计模式等
Mr_Seng
Keep Hungry
展开
-
欧几里得算法
两千多年前的欧几里得算法的目的是求两个数的最大公约数具体算法如下:/**获取最大公约数的函数*/public static int gcd(int p, int q){ if (q == 0){ return p; } int r = p % q; return gcd(q,r);}可以这样理解:A:如果p是那原创 2016-07-06 21:48:42 · 405 阅读 · 0 评论 -
归并排序算法
归并排序这是一种非常高效的排序算法,使用到了递归的思想,就算法复杂度而言,和快排是相当的,某些时候,甚至比快排更合适,更高效。将两个有序数组归并如果能够实现将两个有序数组归并成一个有序数组,那么可以将4个8个16个N个有序数组归并成一个有序数组,那么对于length为N的数组,也就是N个元素为length为1的有序数组,对其归并也可实现排序,那么如何归并两个有序数组呢,或者说,如果一个数组分别实现了原创 2016-12-03 20:31:04 · 603 阅读 · 0 评论 -
希尔排序算法
希尔排序shell排序算法是基于插入排序的一种快速的排序算法,插入排序只会交换相邻的元素,元素需要一个一个的向前或者向后移动,而希尔排序可以交换不相邻的元素,可以先实现整个数组的部分有序,进而再细化排序,实现整个数组的排序。H有序数组对于数组[1, 5, 22, 2, 6, 23, 3, 7, 25, 4, 8, 99] 有以下原创 2016-12-02 14:56:40 · 398 阅读 · 0 评论 -
数据结构-链表
链表链表是链式存储的集合数据结构,节点与节点之间通过记录地址来联系,对于经常需要增删的数据结构,以链表为基础实现会比数组实现高很多。分析要求1. 支持泛型2. 可迭代3. 尽量高效其实要实现一个节点,只需要声明一个包含存储对象和存储地址的抽象数据类型即可,如下:private class Node<Item> { public Node(Item item) {this.item =原创 2016-12-01 22:43:29 · 421 阅读 · 0 评论 -
数据结构-栈
栈栈也称下压栈,是一种先进后出的集合数据类型,在现代计算机科学领域有着广泛的应用。接口设计public interface StackInterface<Item> extends Iterable<Item> {//实现Iterable,可迭代,可Foreach循环 /** 入栈 */ void pop(Item item); /** 出栈 */ Item push原创 2016-12-01 15:06:11 · 394 阅读 · 0 评论 -
数据结构-队列
队列队列是先进先出的集合数据结构 从队列取出元素的顺序与元素入队的顺序是一致的。分析要求1 时间,空间复杂度尽量小2 可迭代,可Foreach3 支持泛型接口设计public interface QueueInterface<T> extends Iterable<T> { /** 入队 */ void enqueue(T t); /** 出队 */ T dequ原创 2016-12-01 17:29:47 · 391 阅读 · 0 评论 -
数据结构-背包
背包背包是不支持从中删除元素的集合数据类型。 存在的目的是帮助调用者收集元素,并遍历之。接口设计/** * 向背包中添加元素 */public void add(Item element);/** * @return 返回背包有效大小 */public int size();/** * @return 迭代器 */public Iterator<Item> iterator();原创 2016-11-30 23:39:35 · 693 阅读 · 0 评论 -
选择排序算法
选择排序法思路选择排序法的核心思想是每次把最小的放在最前面,下一次对除了最小的之外的所有元素组成的新数组进行同样的操作,直至全部排序完成。private void sort1(Comparable[] arr) { for (int i = 0; i < arr.length - 1; i++) {//i就是最小的那个元素应该存放的位置 for (int j = i + 1;原创 2016-11-30 19:14:34 · 528 阅读 · 0 评论 -
插入排序算法
思路好比是在整理一副零散的扑克牌,放在右边,我们先拿出一张牌来放在左边,接着从右边拿出一张插入到左边的队列中,保证左边有序,接着再从右边拿出一张,再插入到左边的合适位置,最终右边的牌全部插入到左边了,排序也就完成了。代码private void sort0(Comparable[] arr) { for (int i = 1; i < arr.length; i++) { /原创 2016-11-30 20:36:10 · 308 阅读 · 0 评论 -
进制转换算法
进制转换进制转换算法可以将m进制的整数mv转为n进制的整数nv。 本文的算法显然不是时间复杂度最优的算法,但是易于理解。 思路主要是: m进制–> 10进制 —> n进制m–>10int num = 745; //需要转换的数String value = num + "";int temp = 0;while (value.length() > 0) { int i = Inte原创 2016-09-07 12:37:09 · 1489 阅读 · 0 评论 -
单例设计模式(Java)
单例模式 即表示内存中只有一个该类的实例,可以节约内存、提高性能。 常见的做法有两种:懒汉式和饿汉式。饿汉式 这里的“饿汉”是说,不管调用端代码是否最终需要一个本例的实例,都先在内存中创建好。代码public class Singleton { private static Singleton singleton = new Singleton(); public原创 2016-09-03 22:05:13 · 280 阅读 · 0 评论 -
经典排序算法
原文:[算法]面试时的Java数据结构与算法查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排转载 2016-12-03 22:03:32 · 879 阅读 · 0 评论