
算法
文章平均质量分 78
pusude
这个作者很懒,什么都没留下…
展开
-
二分查找算法(递归和非递归)
对于一个排好序的数据集合,对某一个数进行查找的时候,我们考虑先和中间角标(因为排好序就是中间大小的数比较,之后即可确定在”一个新的”数据集合里面再这样查找),采用循环和递归方式来实现这个算法。 非递归实现(循环)思路:有两种情况下会结束循环,一是找到了,一是找完了也没找到,我们来看研究对象,一个是待查找的key,一个是数据集合,这也应该是查找函数的参数,返回值应该是key的类型。原创 2016-08-31 22:26:20 · 979 阅读 · 0 评论 -
优先队列和堆排序
1. 从队列到优先队列:无论栈还是队列,它们最重要最本质的操作都是入集合,出集合。队列是在队尾入队(插入),在队头出队(删除)。也即是说先出队的是先入队的,那么存在这么一种情况,如果排队的人有着一种优先级(与排队顺序无关的优先级)那么我们就需要一种新的数据结构:优先队列。它需要插入操作和删除优先级最高的元素两种操作。,2. 优先队列的堆实现 在二叉堆的数组中,每个元素原创 2016-09-06 23:00:15 · 531 阅读 · 0 评论 -
快速排序
1.根据分治想到归并排序,根据归并排序想到快速排序我们要对一个无序的数组排序,用分治的思想来思考解决方案就是,将这个无序的数组分成两个子数组,分别排序,直观想到的结局方案就是归并排序的算法,基于两个排好序的子数组,比较着放入到大数组中。 但是归并排序核心的问题就是,我们能否不用去比较着插入呢?如果要两个子数组有序就得到整个数组有序,那么一定可以推出小的那个子数组最大的数小于等于大的子原创 2016-09-05 22:07:23 · 336 阅读 · 0 评论 -
归并排序
1.从分治思想想到归并排序我们要对一个无序的数组排序,从分治的思想出发,我们把这个无序的数组分成两部分来处理,分别排序,之后再归并到一起,得到一个完整的有序数组。显而易见,排序过程是递归的。 2.归并排序的核心要素对子数组排序不难,递归就可以,真正需要实现的操作是归并,其实很好想,两个各自有序互不相关的数组,我们只需要分别给它们一个指针,分别遍历两个子数组,不断比较两个指针对应的值原创 2016-09-05 22:05:37 · 296 阅读 · 0 评论 -
希尔排序
希尔排序的思想是使数组中任意间隔为h的元素都是有序的,这样的数组被称为h有序数组,,换句话说一个h有序数组就是h个互相独立的的有序数组编制在一起组成的一个数组。H=41 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16A a a a原创 2016-09-03 12:30:18 · 308 阅读 · 0 评论 -
插入排序
理论简介:将每一个数插入到已经有序的数(左边区域)中的适当位置,当然为了给要插入元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。与选择排序一样,当前索引左边的多有元素都是有序的,但它们的最红位置还不确定,为了给更小的元素腾出空间,它们可能会被移动。但是当索引到达数组的右端时,数组排序就完成了。 分析:1. 与选择排序不同,选择排序的处理区域是从整个数组一直减原创 2016-09-03 12:26:31 · 297 阅读 · 0 评论 -
选择排序
选择排序理论:首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换位置,如此往复,指到将整个数组排序。 思路:根据理论,循环遍历所有的元素。在每一趟循环中,要做的工作是,将剩余区间的第一个元素和剩余区间的所有元素相比,找到最小的那个放到剩余区间的第一个位原创 2016-09-02 23:36:50 · 293 阅读 · 0 评论 -
动态连通性问题(1)
问题描述;输入一列整数对,其中每个整数都表示一个某种类型的对象,一对整数p,q被理解为相连的,我们假设相连是一种等价关系,即具备自反,堆成,传递三种特性。当从程序中读取整数对时,如果已知整数对都不能说明p,q是相连的,那么则将这一对整数对写入输出中,如果已知数据对可以说明p,q是相连的,那么就会略这一对p,q,读取下一对输入。 比如 1 2 3 4 输原创 2016-09-02 13:03:11 · 842 阅读 · 0 评论 -
动态连通性问题(2)
问题描述:问题是输入一列整数对,,其中每个整数都表示一个某种类型的对象,一对整数p,q被理解为相连的,我们假设相连是一种等价关系,即具备自反,堆成,传递三种特性。当从程序中读取整数对时,如果已知整数对都不能说明p,q是相连的,那么则将这一对整数对写入输出中,如果已知数据对可以说明p,q是相连的,那么就会略这一对p,q,读取下一对输入。 比如 1 2 3原创 2016-09-02 23:22:48 · 789 阅读 · 0 评论 -
背包实现
背包是一种不支持从中删除元素的集合数据类型,它的目的就是帮助用例手机元素并迭代遍历所有收集到的元素。理解背包的概念,可以想象一个非常喜欢收集弹子球的人,他将所有的弹子球都放在一个背包里,一次一个,并且会不时在所有的弹子球都放在一个背包里,一次一个,并且会不时在所有的弹子球中寻找某一颗拥有某种特点的弹子球。import java.util.Iterator;public class B原创 2016-09-02 00:03:08 · 526 阅读 · 0 评论 -
链表实现队列
队列是一种基于先进先出策略的集合类型,对于排队模型来说,就是排队最久的人最先得到服务,想象一个排队的模型:, 队头1,2,3,…,队尾当入列的时候:跟在原来队尾的最后,即队列最右边当出列的时候:队头出列,其余全部向左边移动 由于队列的入队列和出队列是在不同的首尾两端,所以已经不能像栈一样用一个变量栈顶即可完全描述,这个时候,对队列首尾都需要进行描述,我们设置两个变量,fi原创 2016-09-01 23:06:55 · 639 阅读 · 0 评论 -
链表实现栈
链表是一种递归的数据结构,它或者为空,或者是指向一个节点的引用,该节点含有一个泛型的元素和一个指向另一条链表的引用 链表最重要的是结点和连接结点的指针(引用),是一种递归的思想,(一般每一个结点都包含下一个结点的引用),换句话说,下一个结点是本结点所包含内容的一部分,这个时候,因为包含两个东西,所以数据结构已经很清楚了,结构体struct或者类class 它们都能结合多个信息。原创 2016-09-01 18:19:45 · 808 阅读 · 0 评论 -
栈
栈stack::简单来说就是后进先出的数据结构,可以理解为一个装乒乓球的盒子或者羽毛球的球桶,我们往里面放球的时候后放进去的总是在上面,而我们取的时候,总是先取到上面的,因为下面的球被上面的挡住了,所以,先放进去的后取出来,后放进去的先取出来。 下面我们来实现栈,用java泛型,那么栈就是泛型类型的数组,同时需要实现Iterable接口,以使用迭代器,注意必须实现继承的方法iterat原创 2016-09-01 18:17:13 · 278 阅读 · 0 评论 -
二叉排序树
1..什么是二叉查找树 我们知道链表,由一个结点连着一个结点构成,那么,如果有一种数据结构同样由结点和链接构成,只是不仅仅一个结点连着结点而是两个,是不是可以维护更复杂,更多的关系和信息呢?这就是所谓的二叉树形结构,而二叉查找树是指一个结点的左边所有结点都比它小,而它右边所有的结点都比它的,显然这是一种递归的关系,而且,但它们映射到下面的一条直线上的时候,恰好就是一组中序。如下:原创 2016-09-08 22:35:47 · 292 阅读 · 0 评论