数据结构
文章平均质量分 62
皮蛋小粥
信阳师范学院计算机学院学生
展开
-
数据结构--数组和二分法(复习也是预习)
学到后面总觉得数据结构非常重要,因为Java一些相关技术不断的升级更新,我们不断的学习,但是数据结构和算法其实感觉还是老样子,用来用去都是那些算法,虽然大二时候开过数据结构和算法,但是没有学的很好,勉强应付考试,这里我将继续复习他们,也可以叫预习。。啊哈哈。。。其实就我自己而言对数据结构的理解就是为了高效的对数据的进行处理和安排。下面步入正题:无论是否学过数据结构,数组都是我们所熟知的,在原创 2017-05-11 13:40:19 · 440 阅读 · 0 评论 -
Shell Sort
在希尔排序建议的增量序列情况下(h=N/2 Hk):最好时间复杂度和平均时间复杂度都是,最坏时间复杂度为希尔排序的运行时间依赖于增量序列的选择/** * Created by long.chen on 2017/12/28. */public class ShellSort> { public void sheelSort(T[] data) {原创 2017-12-28 15:39:43 · 234 阅读 · 0 评论 -
Insertion Sort
/** * insertion sort * @author Administrator * @param */public class InserttionSort> {//由小到大 public void insertsort(T []a){ int pre; for(int i =0;i<a.length;i++){ T temp = a[i];//i位置的數值原创 2017-12-27 23:37:47 · 244 阅读 · 0 评论 -
MergeSort
从上往下的归并排序:它与"从下往上"在排序上是反方向的。它基本包括3步:① 分解 -- 将当前区间一分为二,即求分裂点 mid = (low + high)/2; ② 求解 -- 递归地对两个子区间a[low...mid] 和 a[mid+1...high]进行归并排序。递归的终结条件是子区间长度为1。③ 合并 -- 将已排序的两个子区间a[low...mid]和 a[mid+1...原创 2018-01-03 11:44:00 · 258 阅读 · 0 评论 -
Heapsort
堆排序:堆排序就是利用堆这种数据结构的性质来对数组进行排序,在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的性质可知,最大的值一定在堆顶。堆排序一种不稳定的排序算法,其时间复杂度为O(nlogn)算法思想(1)构建最大堆; (2)选择顶,并与第0位置元素交换; (3)由于步骤(2)的的交换可能破环了最大堆的性质,即第0位置的元素不再是最大元素,则需要调用maxHeap调原创 2018-01-02 17:48:23 · 430 阅读 · 0 评论 -
BinaryHeap (最小堆)
package heap;import java.util.ArrayList;import java.util.List;/** * 二叉堆(最小堆) * Created by long.chen on 2017/12/25. */public class BinaryHeapMin> { private List heap; public BinaryH原创 2017-12-26 15:35:00 · 920 阅读 · 0 评论 -
Binary heap
package heap;import java.util.ArrayList;import java.util.List;/** * 二叉堆(最大堆)优先队列的实现 * 堆是一颗被完全填满的二叉树(最底层除外 * Created by long.chen on 2017/12/25. */public class BinaryHeap> { private List原创 2017-12-25 13:44:51 · 301 阅读 · 0 评论 -
AVL树
package avl;/** * Created by long.chen on 2017/12/21. * 平衡二叉树 */public class AVLTree> {//泛型 private AVLTreeNode root;//根节点 class AVLTreeNode> { T key;//键值 int height;//原创 2017-12-22 15:02:45 · 273 阅读 · 0 评论 -
使用栈来模拟队列的操作
使用A和B两个栈来模拟队列,一个为入栈一个为出栈,这样来实现队列这里我们直接使用Java类库提供的Stack来实现。首先我们定义连个栈,一个放数据,一个出数据判断B栈是否有元素,有元素则直接pop;没有元素则需要我们将A里面的元素出栈然后放到B里面,再取出,即实现队列的先进先出Java代码:package v;import java.util.Stack;/*原创 2017-05-16 12:51:58 · 1363 阅读 · 0 评论 -
数据结构-二叉排序树的实现和深度优先算法
树和二叉树的区别:树种节点的最大度数没有限制,二叉树节点的最大度数为2。二叉树的节点有左右之分,也就是是有序树。一个深度为K的满二叉树,包含了2^k-1个节点。完全二叉树是左边或者右边缺少若干连续的节点。二叉排序树:如果左子树不为空左子树的节点都小于根节点,右子树反之,左右子树也分别为二叉排序树。深度优先算法:有三种:先序遍历:OLR o是root原创 2017-05-17 12:18:33 · 640 阅读 · 0 评论 -
如何在O(1)的时间复杂度求栈中的最小数据元素:
如何在O(1)的时间复杂度求栈中的最小数据元素:我们知道栈里面的数据我们只能访问栈顶端的数据,这样时间复杂度就为O(N)。如何用O(1)的事件复杂度求出栈中的最小元素,在算法中经常会采用用空间来换取时间的方式来提高时间的复杂度。也就是用两个栈,一个存放数据,一个存放栈的最小元素。原创 2017-05-15 20:27:19 · 640 阅读 · 0 评论 -
数据结构-栈和队列
站和队列是两种重要的线性数据结构,都是在一个特定的范围的存储单元中的存储数据。与线性表相比,它们的插入和删除操作收到更多的约束和限定,又被称为限定性的线性表结构。栈是先进后出FILO,队列是先进先出FIFO,但是有的数据结构按照一定的条件排队数据的队列,这时候的队列属于特殊队列,不一定按照上面的原则。实现栈:采用数组和链表两种方法来实现栈原创 2017-05-15 08:16:18 · 291 阅读 · 0 评论 -
几种简单排序的比较
一般来说:冒泡排序用的最少,它的应用场合是只有数据量很小的时候才会有一些引用价值。选择排序把交换次数降到最低,但是他的比较次数仍然很大,每次轮到的值保存下来,然后需要和右边数据逐一比较,当交换数据相对于比较数据耗时多时候,可以考虑。大多数情况下:插入排序的三种简单排序算法中最好的选择,对于更大数据量的排序则需要用快速排序。这个在后面的复习中会提出来。 上面三个简单算法时间复杂度都是O(原创 2017-05-13 22:17:22 · 235 阅读 · 0 评论 -
数据结构-选择排序
昨天写了数据结构简单排序中的冒泡排序BubblSort:一般来说第一次排序N个数据,有N-1次比较,第二次又N-2次排序........;总共约N^2/2次比较(最坏的情况下,每次比较都需要交换数据)。由于常数不在大O表示法中所以,时间复杂度为O(N^2.),所以他的速度是很慢的。选择偶爱徐改进了冒泡排序:将交换次数从O(N^2)变成了O(N),但是比较次数不会变。选择排序:将原创 2017-05-12 10:35:26 · 300 阅读 · 0 评论 -
数据结构-冒泡排序
冒泡排序算法在排序的方法中是最简单但是运行起来非常慢所以冒泡排序在开始进行排序学习时候是一个非常好的算法。冒泡排序经过第一轮排序后(由小到大),虽然不能将数据顺序排好,但是将最大的数据放到最后,此后我们在后面几轮,依次将最大值放在后面,直到只有一个数据为止,此时,数据排序完成:下面的例子:6,12,16,7,5;第一轮之后:6,12,7,5,16;此时只需要比较前四个数据第二轮原创 2017-05-11 16:18:29 · 280 阅读 · 0 评论 -
QuickSort
快速排序:基于分治的思想,是冒泡排序的改进型。首先在数组中选择一个基准点(该基准点的选取可能影响快速排序的效率,后面讲解选取的方法),然后分别从数组的两端扫描数组,设两个指示标志(l指向起始位置,h指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换l和h位置的值,然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换l和h位置的值,如此往复循环,直到l>=h,然后把基准点的值原创 2018-01-04 16:40:44 · 215 阅读 · 0 评论