数据结构与算法
尽人事看天意
Android开发 软件开发
展开
-
数据结构之可变长度数组-仿ArrayList实现
分析:1. 实现一个能自动扩容的Array,基于数组实现2. 有增删改查操作3. 类似一个Arraylist结合,支持范型1.构造函数private E[] mDatas;private int size;public Array(int capacity){ mDatas = (E[]) new Object[capacity]; size = 0...原创 2018-08-28 21:36:11 · 443 阅读 · 0 评论 -
Java-基数排序
1.桶式排序概念 有限个数字m,每个数字的大小都在1与n之间,则我们可以假设有n个桶,遍历m个数字, 将其存入对应的桶中(如数字的值为3,就存入3号桶,桶的值对应存入数字的个数)2.基数排序概念 基于桶式排序,将要排序的数字一位一位的比较,经历多次桶式排序,得出最终的序列 如果要排序的元素可以分成多位,并且每一位都在一个固定的范围内,则可以用这种排序方法,...原创 2018-03-31 00:02:41 · 206 阅读 · 0 评论 -
Java-希尔排序
1. 基本概念 基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d, 对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序, 当增量减到1时,进行直接插入排序后,排序完成。2. 算法分析 1、将包含n个元素的数组,分成n/2个数组序列,第一个数据...原创 2018-03-30 17:34:34 · 153 阅读 · 0 评论 -
Java-归并排序
1.原理/思路 归并排序的设计思路是:将待排序的数组分为两个字数组,分别对它们按同样的方式进行排序,最后将两个有序子数组 归并成一个有序数组。2.分析做法1.将当前序列一分为二,求出分裂点mid = (left + right) / 2;2.对子序列arr[left,mid]递归,进行归并排序,结果放入data[left,mid]中;3.对子序列arr[mid+1,righ...原创 2018-03-30 00:31:57 · 155 阅读 · 0 评论 -
快速排序(面试必备,多种解法)
1.原理/思路快速排序一般基于递归实现。其思路是这样的:1.选定一个合适的值(理想情况中值最好,但实现中一般使用数组第一个值),称为“枢轴”(pivot)。2.基于这个值,将数组分为两部分,较小的分在左边,较大的分在右边。3.可以肯定,如此一轮下来,这个枢轴的位置一定在最终位置上。4.对两个子数组分别重复上述过程,直到每个数组只有一个元素。5.排序完成。2.分析做法1.附设...原创 2018-03-29 23:52:02 · 383 阅读 · 0 评论 -
Java-插入排序
1.原理 把n个待排序的元素看成一个有序表和无序表。一开始有序表只包含一个元素,无序表中包含n-1个元素。 排序过程中每次从无序表中取出第一个元素,把它依次与有序表中的元素进行比较。然后把它插入到有序表的适当位置, 形成新的有序表。 通俗的讲:假设第一个元素是有序的,后面的元素往前插入,依次进行比较,小的往前挪,大的往后挪,找到合适的位置插入。 打个形象的比方就是打扑克牌时的摆牌。...原创 2018-03-29 23:11:50 · 235 阅读 · 0 评论 -
Java-选择排序
1.原理 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。 也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。2.思路 给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n-1]中选出最小的数据, 将它与arr[0]交换;第2趟,在待排序数...原创 2018-03-29 21:20:48 · 124 阅读 · 0 评论 -
Java-冒泡排序
1.原理比较两个相邻的元素,将值大的元素交换至右端。2.思路依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。分析:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N...原创 2018-03-29 20:59:45 · 226 阅读 · 0 评论 -
数据结构之二分搜索树增删改查和遍历实现
1. 概念是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;2. 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;3. 任意节点的左、右子树也分别为二叉查找树;4. 没有键值相等的节点。2. 构建一个二分搜素树节点 public class TreeNode<E exte...原创 2018-08-29 15:07:00 · 446 阅读 · 0 评论 -
数据结构之递归实现
1. 概念解释:程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。2...原创 2018-08-29 00:01:42 · 2223 阅读 · 0 评论 -
数据结构之链表实现
分析:链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。单链表是链表中结构最简单的。一个单链表的节点(Node)分为两个部分,一个是数据域,一个是节点域。双向链表可以从两个方向遍历1. 单向链表1)定义一个节点class Node<E> { ...原创 2018-08-28 22:37:58 · 423 阅读 · 0 评论 -
数据结构之栈和队列的实现
1. 分析:1. 栈的特点是先进后出2. 栈就好比一个箱子,先放进去的东西,被压在了箱子底部,需要上面的东西拿出来之后下面的东西才能拿出来。3. 队列的特点是先入先出4. 队列就好比排队买票,先排队的先买票,我可不会给你插队的5. 队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空...原创 2018-08-28 22:08:32 · 254 阅读 · 0 评论 -
Java-堆排序
1.概念 是一种树形选择排序,在排序过程中,将待排序的记录r[1..n]看成是一颗完全二叉树的顺序存储结构, 利用完全二叉树中的双节点和孩子节点之间的内在关系,在当前无序的序列中选择关键字最大或最小的记录。2.思路 实现堆排序需解决两个问题: (1)如何将n 个待排序的数建成堆; (2)输出堆顶元素后,怎样调整剩余n-1 个元素,使其成为一个新堆。...原创 2018-04-01 16:54:42 · 108 阅读 · 0 评论