数据结构
文章平均质量分 70
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
跋扈洋
#公众号:物联网知识
展开
-
堆排序(C语言实现)
欢迎关注公众号:物联网知识。原创 2022-09-26 12:10:34 · 408 阅读 · 0 评论 -
什么是简单选择排序?
简单选择排序的基本思想是每一趟在后面n-i+1个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完。原创 2022-09-26 12:06:43 · 2548 阅读 · 0 评论 -
快速排序(C语言实现)
快速排序的基本思想是基于分治法的,在待排序表中任选一个基准元素,通过一趟排序将待排序划分为独立的两部分,前半部分所有元素均比枢轴元素小,后半部分所有元素均比枢轴元素大,此时枢轴元素就放在了最终的位置,然后分别对两个字表递归重复上面的过程,直至每部分内只有一个元素或空为止,即所有元素放在了其最终位置上。原创 2022-09-22 10:18:39 · 429 阅读 · 0 评论 -
冒泡排序(C语言实现)
冒泡排序的基本思想是:从前往后(或从后往前)两两比较相邻元素的值,若为逆序(即A[I-1]>A[I]),则交换它们,直到序列比较完。我们称它为第一趟冒泡,结果是将最小的元素交换到待排序列的第一个位置(或将最大的元素交换到待排序列的最后一个位置),关键字最小的元素如气泡一样逐渐向上“漂浮”。最终一个一个排好了位置。冒泡排序可以说是所有排序算法中最容易理解的,我们每次都选出一个最大(最小)的元素,选择n-1次就将个元素排成了一个递减(递增)的序列。原创 2022-09-21 15:32:19 · 941 阅读 · 0 评论 -
什么是希尔排序?
本文主要介绍了什么是希尔排序算法,希尔排序的基本思想和过程是什么样,并分享了两个希尔排序的实现程序,让读者理解的更加容易。原创 2022-09-20 18:25:27 · 1601 阅读 · 0 评论 -
图的应用(最小生成树,拓扑排序)
应用图解决现实问题是我们使用图这种数据结构的原因所在。最小生成树是图的应用中很常见的一个概念,一个图的最小生成树不是唯一的,但最小生成树的边的权值之和纵使唯一的。最小生成树的算法主要有Prim算法和Kruskal算法。这两种算法都是基于贪心算法策略(只考虑眼前的最佳利益,而不考虑整体的效率)。......原创 2022-09-01 10:01:50 · 601 阅读 · 0 评论 -
字符串匹配:字符串中查找某子串
基于C语言的字符串匹配算法,既有常规方法,又有KMP算法。原创 2022-02-14 18:19:48 · 4313 阅读 · 0 评论 -
置换-选择算法
我们都知道,减少初始归并段个数r可以减少归并趟数S。若总的记录个数为n,每个归并段的长度为t,则归并段的个数为r=[n/t]。采用内部排序方法得到的各个初始归并段长度都相同(除最后一段外),它依赖于内部排序时可用内存空间工作区的大小。因此,必须探索新的方法,用来产生更长的初始归并段,这就是引入置换-选择算法的原因。原创 2021-08-19 19:20:55 · 1034 阅读 · 0 评论 -
多路平衡归并和败者树
多路平衡归并和败者树为什么要引入败者树?什么是败者树?后续为什么要引入败者树?我们都知道,增加归并路数k能有效减少归并趟数S,进而减少I/O。然而,增加归并路数k时,内部归并的时间将增加。做内部归并时,在k个元素中选取关键字最小的记录需要进行k-1次比较。每趟归并n个元素需要做(n-1)(k-1)次比较,S趟归并总共需要的比较次数是S(n-1)(k-1)=[log k r] (n-1) (k-1)=[log 2 r] (n-1) (k-1)/[log 2 k]式中,(k-1)/【log 2 k】随k原创 2021-08-18 19:57:49 · 2859 阅读 · 4 评论 -
什么是外部排序?
外部排序外部排序的基本概念外部排序的方法后续外部排序的基本概念在内存中进行的排序是内部排序,而在许多应用中,经常需要对大文件进行排序,因为文件中的记录很多、信息量庞大,无法将整个文件复制进内存中进行排序。因此,需要将待排序的记录存储在外存中,排序时再把数据一部分一部分地调入内存进行排序,在排序过程中需要多次进行内存和外存之间地交换。这种排序方法就称为外部排序。外部排序指待排序文件较大,内存中一次性放不下,需存放在外存地文件地排序。为减少平衡归并中外存读写次数所采取地方法:增大归并路数和减少归并段原创 2021-08-18 15:21:04 · 6399 阅读 · 0 评论 -
各种排序算法的比较
各种排序算法的比较排序算法的比较从时间复杂度上来看从空间复杂度来看从稳定性看其他特点后续排序算法的比较从时间复杂度上来看简单选择排序、直接插入排序和冒泡排序平均情况下的时间复杂度都为O(n^2),且实现过程也较为简单,但直接插入排序和冒泡排序最好情况下的时间复杂度的时间复杂度可以达到O(n),而简单选择排序则与序列的初始状态无关。希尔排序作为插入排序的拓展,对较大规模的排序都可以达到很高的效率,但目前未得出其精确的渐近时间。堆排序利用了一种称为堆的数据结构,可在线性时间内完成建堆。且在O(nlog2原创 2021-08-17 20:20:10 · 3999 阅读 · 1 评论 -
什么是基数排序?
基数排序概念实现方法算法实现后续概念基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。基数排序是一种很特别的排序方法,它不基于比较和移动进行排序,而基于关键字各位的大原创 2021-08-15 19:57:42 · 2099 阅读 · 0 评论 -
什么是归并排序?
什么是归并排序?概念算法实现后续概念“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。假设待排序表含有n个记录,则可将其视为n个有序的子表,每个子表的长度为一,然后两两归并,得到【n/2】个长度为2或1的有序表;继续两两归并。。。如此重复,直到合并成一个长度为n的有序表为止,这种排序方法称为2路归并排序。归并排序是使用到了分治方法(Divide and Conquer)。Divide:将原问题分解为若干子问题,其中这些子问题的规模小于原问题的规模。Conquer:递归地求解子问题,当原创 2021-08-15 19:35:01 · 1181 阅读 · 0 评论 -
排序算法之选择排序(简单选择排序、堆排序)
选择排序(简单选择排序、堆排序)选择排序简单选择排序概念算法实现堆排序概念算法实现后续选择排序选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列。简单选择排序概念假设排序表为L[1…N],,第i趟排序即从L[1…N]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序。算法实现void select_sort(ElemType A[],int n){ int i, j,min; for原创 2021-08-12 21:05:25 · 775 阅读 · 0 评论 -
排序算法之交换排序(冒泡排序、快速排序)
所谓交换,是指根据序列中两个关键字的比较结果来对换这两个记录在排序中的位置。原创 2021-08-11 20:59:27 · 430 阅读 · 0 评论 -
排序算法之插入排序(直接插入排序、折半插入排序、希尔排序)
排序算法之插入排序插入排序直接插入排序理论算法实现折半插入排序算法实现希尔排序概念算法实现后续插入排序在排序过程中,根据数据元素是否完全在内存中,可以将排序分成两类:内部排序:是指在排序期间元素全部存放在内存中的排序。内部排序在执行过程中都要进行两种操作:比较和移动。外部排序:是指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断地在内、外存之间移动的排序。外部排序还要关注如何使读/写磁盘次数更少。插入排序的思想是每次将一个待排序的记录按其关键字大小插入前面已排好序的子序列原创 2021-08-10 21:57:31 · 1157 阅读 · 1 评论 -
B树、B+树到底是什么?
B树B树又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一般从查找效率考虑,通常要求m>=3.概念一棵m阶b树或为空树,或为满足如下特质的n叉树:树中每个结点至多有m棵子树,即至多含有m-1个关键字若根节点不是终端结点,则至少有两棵树除根结点外的所有非叶节点至少有【m/2】(向上取整)棵子树,即至少含有【m/2】(向上取整)-1个关键字所有非叶节点的结构如下:| 1 | 2 ||–|--|| 2 | 2 |...原创 2021-08-08 20:42:23 · 1492 阅读 · 0 评论 -
线性表的顺序表示和实现(严蔚敏版)
数据结构:顺序表的增、删、改、查、两表合并原创 2021-05-19 17:31:32 · 419 阅读 · 0 评论 -
什么是散列表(哈希表)?
散列表(哈希表)概念散列表的构造方法处理冲突的方法后续概念散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key)=Addr(这里的地址可以是数组下标、索引或内存地址等)散列函数可能会把两个或两个以上的不同关键字映射到同一地址,称这种情况为冲突,这些发生碰撞的不同关键字称为同义词。散列表:根据关键字而直接进行访问的数据结构。理想情况下,对散列表进行查找的时间复杂度O(1),即与表中元素的个数无关。散列表的构造方法直接定址法:直接取关键字的某个线性函数值为散列原创 2021-08-09 21:36:35 · 1013 阅读 · 0 评论