数据结构
qiangsanwa
这个作者很懒,什么都没留下…
展开
-
查找——散列表查找(哈希表)
散列算法概念散列是通过一定的方法,直接将某个数据的key转化成访问地址。使得存储位置=f(关键字),通过f(key)我们能直接访问这个数据。我们把这种对应关系f成为散列函数,又称哈希函数。采用散列技术将记录存储在一块连续的空间中,这块连续的空间称为散列表或哈希表。关键字对应的存储位置我们称为散列地址。散列冲突两个关键字,通过函数计算出来的地址如果是一样的。对于这种情况,我们称之为冲突,并把key1和原创 2017-07-20 14:40:18 · 526 阅读 · 0 评论 -
查找——斐波那契查找法
算法定义斐波那契是二分法的改进版,他跟插值查找类似。不同的是它利用了数学领域的黄金分割法则(也就是0.618法则),它避免死板的二分法则,在概率学领域减少了查找次数。如下图,这个是待查找数组的结构,我们一定要注意左侧的长度是F[k-1],右侧的长度是F[k-2]-1。这跟我们见到的斐波那契数组(1,1,3,5,8,11……)不同,我们见到的数组是左侧大于右侧(如果不仔细看这里,很难理解后面的 k=k原创 2017-07-19 22:10:29 · 875 阅读 · 0 评论 -
查找——折半查找(二分法查找)
算法解释二分法查找针对的是一个已经排好序的查找数据结构。通常情况下,顺序查找需要逐一遍历,而二分法查找利用排序的优势,将查找范围每次逐步缩小二分之一,直到查找到为止。 下面是代码:#include <stdio.h> #include <iostream> #include <time.h> #include <malloc.h> #define MAXSIZE 10 using namespac原创 2017-07-19 15:09:01 · 359 阅读 · 0 评论 -
查找——插值查找
算法说明插值查找说白了就是二分法查找的改良版本,在二分法查找的时候,mid这个数字每次都是取当前数组总数的二分之一,这样做就不太符合常理,因为很多情况下,大量数据分布是基本保持均匀的,比如说我们在查字典的时候要查“我”这个汉字,一般情况下,我们是直接往后面翻的,原因是我们基本上知道w是排在后面的。插值查找就是利用这样的特性来优化二分法查找(当然他的前提是基本分布均匀,否则的话效率比插值查找还慢)。插原创 2017-07-19 20:31:09 · 411 阅读 · 0 评论 -
查找——顺序查找
查找的基本概念 查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定数值的数据元素。 查找分为两种情况:静态查找和动态查找。静态查找是查询某个特定的元素是否在查找表中,检索某个特定的数据元素和各种属性。动态查找是查找时插入数据元素以及删除数据元素。 顺序查找顺序查找又叫线性查找,是基本的查找技术,他的查找过程是从第一个记录开始,逐个进行比较,如果跟查询的值相等,则查找成功。如果没有任何值跟他原创 2017-07-19 14:23:21 · 329 阅读 · 0 评论 -
查找——冒泡排序
算法解释冒泡排序是我们最常见,也是最简单的一种排序。他的核心思想是通过迭代交换相邻的两个数字,不断的把小的数转移到数组的最前面去,把较大的数留在末端。他的时间复杂度是O(n^2)。冒泡排序有三种实现方法(严格的来说是两种),下面是这三种方法的实现代码:#include <stdio.h> #include <iostream> #include <time.h> #include <malloc.h原创 2017-07-20 18:09:33 · 258 阅读 · 0 评论 -
查找——冒泡排序
算法解释冒泡排序是我们最常见,也是最简单的一种排序。他的核心思想是通过迭代交换相邻的两个数字,不断的把小的数转移到数组的最前面去,把较大的数留在末端。他的时间复杂度是O(n^2)。冒泡排序有三种实现方法(严格的来说是两种),下面是这三种方法的实现代码:#include <stdio.h> #include <iostream> #include <time.h> #include <malloc.h原创 2017-07-20 18:09:33 · 272 阅读 · 0 评论 -
查找——冒泡排序
算法解释冒泡排序是我们最常见,也是最简单的一种排序。他的核心思想是通过迭代交换相邻的两个数字,不断的把小的数转移到数组的最前面去,把较大的数留在末端。他的时间复杂度是O(n^2)。冒泡排序有三种实现方法(严格的来说是两种),下面是这三种方法的实现代码:#include <stdio.h> #include <iostream> #include <time.h> #include <malloc.h原创 2017-07-20 18:09:32 · 258 阅读 · 0 评论 -
排序算法
排序的稳定性在一个数组中有两个值,分别是a,b且a=b,a在b的前面。排序后,如果a还在b的前面,我们把这种排序成为稳定排序,否之就是不稳定性排序内排序和外排序内排序是指在排序的时候,会把所有的数据都一次性加载到内存里去,而外排序则是分批加载。原创 2017-07-20 15:15:48 · 254 阅读 · 0 评论 -
查找——线性索引查找
索引的定义一本书的内容通常是无序的,如果没有目录,要想快速找到某一张,则需要将一本书按顺序翻过去,这是非常耗时的。计算机的索引跟图书目录类似,它记录了关键词和数据的位置。索引按照结构可以分为线性索引、树形索引、多级索引。实际上他们的命名是根据索引数据结构来区分的,线性索引是指索引项集合组织为线性结构。常用的线性索引有:稠密索引、分块索引、倒排序索引。稠密索引稠密索引是指每一条数据都有一个索引和其对应原创 2017-07-19 22:48:21 · 398 阅读 · 0 评论