
算法
bj09
你的微笑
展开
-
HashMap实现原理分析
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除转载 2017-05-11 16:51:33 · 335 阅读 · 0 评论 -
Reverse Words in a String 反转单词顺序
Reverse Words in a String Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". Update (2015-02-12): For C programmers: T转载 2017-06-13 14:41:48 · 491 阅读 · 0 评论 -
Java 常用排序算法/程序员必须掌握的 8大排序算法
分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序。 先来看看 8种排序之间的关系:转载 2017-06-12 17:13:00 · 401 阅读 · 0 评论 -
常用查找算法
1.顺序查找 Java代码 /**顺序查找平均时间复杂度 O(n) * @param searchKey 要查找的值 * @param array 数组(从这个数组中查找) * @return 查找结果(数组的下标位置) */ public static int orderSearch(int searchKey,int[] array转载 2017-06-12 15:58:27 · 349 阅读 · 0 评论 -
Java 快速排序(QuickSort)原理及实现代码
Java 快速排序(QuickSort)原理及实现代码 快速排序(QuickSort )是常用到的效率比较高的一种排序算法,在面试过程中也经常提及。下面就详细讲解一下他的原理、给出一个Java版本的实现。 快速排序思想: 通过对数据元素集合Rn 进行一趟排序划分出独立的两个部分。其中一个部分的关键字比另一部分的关键字小。然后再分别对两个部分的关键字进行一趟排序,直到独立的元素只有转载 2017-06-12 14:09:54 · 1013 阅读 · 1 评论 -
如何给100亿个数字排序?
场景 之前写过一篇海量数据中统计ip出现次数最多的博客,今天再写篇类似的,当然会有不同的地方,相同的地方我快速写过,详细的可以看之前的博客。 今天要给100亿个数字排序,100亿个 int 型数字放在文件里面大概有 37.2GB,非常大,内存一次装不下了。那么肯定是要拆分成小的文件一个一个来处理,最终在合并成一个排好序的大文件。 实现思路 1.把这个37GB的大文件,用哈希分成1000转载 2017-07-03 17:46:46 · 924 阅读 · 0 评论 -
单链表冒泡排序
/** * 链表结点类 */class Node{ private int data; private Node next; //链表结点的指针域,指向直接后继结点 public Node(){ next = null; } public Node(int data, Node next){ this.data = data; this.next = next; } publ转载 2017-07-03 16:45:41 · 348 阅读 · 0 评论 -
快速排序原理及Java实现
1、基本思想: 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的。快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数。同时采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,其原理如下:对于给定的一组记录,转载 2017-06-12 12:21:04 · 2535 阅读 · 0 评论 -
冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。 举例说明:要排序数组:int[] arr={6,3,8,2,9,1};转载 2017-06-12 11:58:50 · 272 阅读 · 0 评论 -
选择算法
a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序) b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序转载 2017-06-12 11:57:15 · 529 阅读 · 0 评论 -
选择排序
a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序) b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序转载 2017-06-12 11:50:43 · 269 阅读 · 0 评论 -
http://blog.youkuaiyun.com/feliciafay/article/details/6841115
如何把一个单链表进行反转? 方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。 方法2:使用3个指针遍历单链表,逐个链接点进行反转。 方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。 方法4: 递归(相信我们都熟悉的一点是,对于树的大部分问题,基本可以考虑用递归来解决。但是我们不太熟悉的一点是,转载 2017-06-08 16:13:01 · 433 阅读 · 0 评论 -
HashMap,ArrayMap,SparseArray源码分析及性能对比
ArrayMap及SparseArray是android的系统API,是专门为移动设备而定制的。用于在一定情况下取代HashMap而达到节省内存的目的。 一.源码分析(由于篇幅限制,源码分析部分会放在单独的文章中) 二.实现原理及数据结构对比 三.性能测试对比 四.总结 一.源码分析 稍后会在下一篇文章中补充(都写在一篇,篇幅太长了) 二.实现原理及数据结构对比 1. hashMa转载 2017-08-07 16:02:25 · 562 阅读 · 0 评论