-
【数据结构】排序算法(一)之直接插入排序,冒泡排序
所属栏目:[安全] 日期:2021-05-19 热度:115
? ? 排序算法在面试中是常见的,尤其是(插入排序,冒泡排序和快速排序),就抽个时间再复习一下排序算法吧 ? ? 插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插入到前面已经排序的序列中的适当位置,直到每个记录都插入完毕为止。 ? ? 1:[详细]
-
【数据结构】排序算法(二)之交换排序之快速排序(QuickSort)
所属栏目:[安全] 日期:2021-05-19 热度:74
? ? ? 上一次学习了【【数据结构】排序算法(一)之直接插入排序,冒泡排序】今天重新学习了一下快速排序 ? ? 快速排序是是属于交换排序的范畴,另外一种的交换排序的代表是冒泡排序(上面有冒泡排序的链接地址) 快排的基本思路其实还是挺简单的: 我们从需[详细]
-
【数据结构】二叉树、AVL树
所属栏目:[安全] 日期:2021-05-19 热度:151
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://www.voidcn.com/article/p-srsfcefa-vo.html ? 二叉树 二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(lef[详细]
-
【数据结构】选择排序
所属栏目:[安全] 日期:2021-05-19 热度:90
#include stdio.h//#include string.hvoid swap(int *a,int* b){int tmp;tmp = *a;*a = *b;*b = tmp;}//void BubbleSort(int *p,int n)//{//int i,j;//for(i=0; in ;i++)//{//for( j=n-1; j = i; j--)//{//if(p[j]p[j-1])//swap(p[j],p[j-1]);/[详细]
-
【数据结构】直接插入排序
所属栏目:[安全] 日期:2021-05-19 热度:165
#include stdio.h//#include string.hvoid InsertSort(int a[],int n){int i,j,t;for( i=1 ;in; i++){t = a[i];j = i-1;while( j=0 ta[j]){a[j+1] = a[j];j--;}a[j+1] = t;}}int main(){int i ;int num[9]={9,1,5,8,3,7,4,6,2};//BubbleSort(num,9);InsertSo[详细]
-
【数据结构】希尔排序
所属栏目:[安全] 日期:2021-05-19 热度:141
希尔排序的原理参见,维基百科,http://zh.wikipedia.org/wiki/希尔排序,这里给出源代码。 #includestdio.hvoid ShellSort(int a[],int n){int i,j,k,temp,gap;int gaps[]={1,5,13,43,113,297,815,1989,4711,11969,27901,84801,213331,543749,1355339,35016[详细]
-
【数据结构】堆排序
所属栏目:[安全] 日期:2021-05-19 热度:110
参考一篇文章: http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html 另外,在下面的链接下还有动画演示: http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/flashhtml/duipaixu.htm ? 下面是源代码: /*堆排序(大顶堆) 2011.9.14*/#in[详细]
-
【数据结构】归并排序
所属栏目:[安全] 日期:2021-05-19 热度:130
归并排序(Merge sort,台湾译作:合并排序) 是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。(维基百科) 参考文章: http://www.voidcn.com/article/p-ccwctxoe-yt.html 下面是具体代码: #inc[详细]
-
【数据结构】哈希表
所属栏目:[安全] 日期:2021-04-04 热度:145
哈希表(散列表),是通过关键字key而直接访问在内存存储位置的一种数据结构,它就是 以空间换取时间。通过多开辟几个空间,来实现查找的高效率。 对于哈希表,我们并不是很陌生:在c语言学习阶段,给定一个字符串,查找第一个只出现过一次的字符;在数据结[详细]
-
【数据结构】Hash表
所属栏目:[安全] 日期:2021-04-03 热度:83
【数据结构】Hash表 Hash表也叫散列表,是一种线性数据结构。在一般情况下,可以用o(1)的时间复杂度进行数据的增删改查。在Java开发语言中,HashMap的底层就是一个散列表。 1. 什么是Hash表 Hash表是一种线性数据结构,这种数据结构的底层一般是通过数组来实[详细]
-
自己动手实现java数据结构(五)哈希表
所属栏目:[安全] 日期:2021-04-03 热度:146
1.哈希表介绍 前面我们已经介绍了许多类型的数据结构。在想要查询容器内特定元素时,有序向量使得我们能使用二分查找法进行精确的查询(( O(logN)对数复杂度,很高效 )。 可人类总是不知满足,依然在寻求一种更高效的特定元素查询的数据结构, 哈希表/散列表([详细]
-
自己动手实现java数据结构(七) AVL树
所属栏目:[安全] 日期:2021-04-03 热度:115
1.AVL树介绍 前面我们已经介绍了二叉搜索树。普通的二叉搜索树在插入、删除数据时可能使得全树的数据分布不平衡,退化,导致二叉搜索树最关键的查询效率急剧降低。这也引出了平衡二叉搜索树的概念,平衡二叉搜索树在此前的基础上,通过一系列的等价变换使二[详细]
-
自己动手实现java数据结构(八) 优先级队列
所属栏目:[安全] 日期:2021-04-03 热度:179
1.优先级队列介绍 1.1 优先级队列 有时在调度任务时,我们会想要先处理优先级更高的任务。例如,对于同一个柜台,在决定队列中下一个服务的用户时,总是倾向于优先服务VIP用户,而让普通用户等待,即使普通的用户是先加入队列的。 优先级队列和普通的先进先[详细]
-
自己动手实现java数据结构(六)二叉搜索树
所属栏目:[安全] 日期:2021-04-03 热度:128
1.二叉搜索树介绍 前面我们已经介绍过了向量和链表。有序向量可以以二分查找的方式高效的查找特定元素,而缺点是插入删除的效率较低(需要整体移动内部元素);链表的优点在于插入,删除元素时效率较高,但由于不支持随机访问,特定元素的查找效率为线性复杂度[详细]
-
自己动手实现java数据结构(一) 向量
所属栏目:[安全] 日期:2021-04-03 热度:84
1.向量介绍 计算机程序主要运行在内存中,而内存在逻辑上可以被看做是连续的地址。为了充分利用这一特性,在主流的编程语言中都存在一种底层的被称为 数组(Array) 的数据结构与之对应。在使用数组时需要事先声明 固定的大小 以便程序在运行时为其开辟内存空[详细]
-
自己动手实现java数据结构(四)双端队列
所属栏目:[安全] 日期:2021-04-03 热度:100
1.双端队列介绍 在介绍双端队列之前,我们需要先介绍队列的概念。和栈相对应,在许多算法设计中,需要一种" 先进先出(First Input First Output) "的数据结构,因而一种被称为" 队列(Queue) "的数据结构被抽象了出来(因为现实中的队列,就是先进先出的)。 队[详细]
-
自己动手实现java数据结构(三) 栈
所属栏目:[安全] 日期:2021-04-03 热度:113
1.栈的介绍 在许多算法设计中都需要一种 "先进后出(First Input Last Output)" 的数据结构,因而一种被称为 "栈" 的数据结构被抽象了出来。 栈的结构类似一个罐头:只有一个开口;先被放进去的东西沉在底下,后放进去的东西被放在顶部;想拿东西必须按照从上[详细]
-
自己动手实现java数据结构(二) 链表
所属栏目:[安全] 日期:2021-04-03 热度:114
1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的 线性表 。今天,要介绍的是线性表的另一种实现方式--- 链表 。 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构。但是,链表内部存储数据的方式却和向量大不相同:链[详细]
-
栈-java代码
所属栏目:[安全] 日期:2021-04-03 热度:72
import java.util.Arrays; public class StackDemo { private int maxSize; long [] stackArray; top; // 构造器 public StackDemo( s){ 初始化栈 maxSize = s; stackArray = new [maxSize]; top = -1 ; } 入栈 void push( element){ stackArray[ ++top] = e[详细]
-
队列-java代码
所属栏目:[安全] 日期:2021-04-03 热度:80
public class QueueDemo { private int maxSize; long [] queueArray; // 队列的头,实际是数组的尾 header; 队列的尾,实际是数组的头 footer; nElems; public QueueDemo( size){ maxSize = size; queueArray = new [maxSize]; header = 0 ; footer = -1 ;[详细]
-
算法图解之散列表
所属栏目:[安全] 日期:2021-04-03 热度:58
散列函数 专业术语表述,”将输入映射到数字”。 散列函数具有如下要求: (1)它必须是一致的。 如你输入blog得到的是wordpress,那么每次输入blog,得到的都必须为wordpress。 (2)它应将不同的输入映射到不同的数字。 如,如果一个散列函数不管输入是什么都返[详细]
-
算法图解之二分查找
所属栏目:[安全] 日期:2021-04-03 热度:69
简单查找,如下图: ? 从图可知那个眼镜男从1开始猜,猜到100,大家都知道这种猜法最终都会得到答案,就是时间问题而已。100毕竟是这个列表的最大长度。但是换言之,如果是一万、百万、上千亿呢?那么这种猜法虽然能够得到答案,但是时间方面的成本将会非常大[详细]
-
lt;数据结构与算法分析gt;读书笔记--运行时间中的对数及其分析
所属栏目:[安全] 日期:2021-04-03 热度:106
分析算法最混乱的方面大概集中在对数上面。我们已经看到,某些分治算法将以O(N log N)时间运行。此外,对数最常出现的规律可概括为下列一般法则: 如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是O(logN)。另一方面,如[详细]
-
lt;数据结构与算法分析gt;读书笔记--最大子序列和问题的求解
所属栏目:[安全] 日期:2021-04-03 热度:128
? 现在我们将要叙述四个算法来求解早先提出的最大子序列和问题。 第一个算法,它只是穷举式地尝试所有的可能。for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实。还有,本算法并不计算实际的子序列;实际的计算还要添加一些额外的代码[详细]
-
lt;数据结构与算法分析gt;读书笔记--实现泛型构件pre-Java5
所属栏目:[安全] 日期:2021-04-03 热度:197
? 面向对象的一个重要目标是对代码重用的支持。支持这个目标的一个重要的机制就是泛型机制:如果除去对象的基本类型外,实现的方法是相同的,那么我们就可以用泛型实现来描述这种基本的功能。 ? ? 1.使用Object表示泛型 Java中的基本思想就是可以通过使用像Ob[详细]