📝 数据结构和算法
20661篇技术文档📅  最后修改于: 2020-10-15 01:22:09        🧑  作者: Mango
计数排序这是一种基于键的排序技术,即根据小整数的键来收集对象。计数排序计算对象的出现次数并存储其键值。通过添加先前的关键元素并分配给对象来形成新的数组。复杂时间复杂度:O(n + k)是最坏的情况,其中n是元素数,k是输入范围。空间复杂度:O(k)k是输入范围。ComplexityBest CaseAverage CaseWorst CaseTime ComplexityΩ(n+k)θ(n+k)O...
📅  最后修改于: 2020-10-15 01:23:11        🧑  作者: Mango
堆排序堆排序通过使用给定数组的元素创建最小堆或最大堆来处理元素。最小堆或最大堆表示数组的顺序,其中根元素表示数组的最小或最大元素。在每个步骤中,堆的根元素都将被删除并存储到排序后的数组中,并且堆将再次被堆化。堆排序基本上以递归方式执行两个主要操作。使用ARR的元素构建堆H。重复删除阶段1中形成的堆的根元素。复杂ComplexityBest CaseAverage CaseWorst caseTim...
📅  最后修改于: 2020-10-15 01:36:48        🧑  作者: Mango
程序创建n个节点的单链接列表并计算节点数说明在此程序中,我们需要创建一个单链接列表并计算列表中存在的节点。要完成此任务,请使用最初指向head的节点current遍历列表。以这样的方式增加电流,即电流将在每次迭代中指向其下一个节点,并将变量count增加1。最后,该计数将保留一个值,该值表示列表中存在的节点数。算法创建一个具有两个属性的类Node:data和next。下一个是指向列表中下一个节点的...
📅  最后修改于: 2020-10-15 01:38:00        🧑  作者: Mango
程序创建和显示单链列表说明在此程序中,我们需要创建一个单链列表并显示列表中存在的所有节点。单链表单链接列表是线性数据结构,其中列表的每个元素都包含一个指向列表中下一个元素的指针。单链列表中的每个元素都称为节点。每个节点都有两个部分:数据和下一个指向列表中下一个节点的指针。列表的第一个节点称为头,列表的最后一个节点称为尾。列表的最后一个节点包含一个指向null的指针。通过从头到尾遍历列表,可以线性访...
📅  最后修改于: 2020-10-15 01:39:20        🧑  作者: Mango
程序创建n个节点的单链接列表并以相反顺序显示说明在此程序中,我们需要创建一个单链列表并以相反的顺序显示该列表。原始清单冲销清单解决此问题的方法之一是到达列表的末尾,并从尾到头递归显示节点。算法创建一个具有两个属性的类Node:data和next。下一个是指向列表中下一个节点的指针。创建另一个具有两个属性的类:head和tail。addNode()将向列表添加一个新节点:创建一个新节点。它首先检查h...
📅  最后修改于: 2020-10-15 01:48:35        🧑  作者: Mango
从单链列表的开头删除新节点的程序说明在此程序中,我们将创建一个单链列表,并从列表的开头删除一个节点。要完成此任务,我们需要使头指针指向初始节点的直接下一个节点,该节点现在将成为列表的新头节点。考虑上面的例子; Node是列表的头。使头指向列表中的下一个节点。现在,节点1将成为列表的新头。因此,删除节点。算法创建一个具有两个属性的类Node:data和next。下一个是指向列表中下一个节点的指针。创...
📅  最后修改于: 2020-10-15 03:04:10        🧑  作者: Mango
插入排序插入排序是一种简单的排序算法,通常在日常生活中订购一副纸牌时使用。在此算法中,我们将每个元素插入到已排序数组中的适当位置。这比其他排序算法(例如快速排序,合并排序等)效率低。技术考虑一个数组A,其元素将被排序。最初,A [0]是排序集中的唯一元素。在过程1中,A [1]被放置在数组中的适当索引处。在步骤2中,A [2]被放置在数组中的适当索引处。同样,在通道n-1中,A [n-1]被放置在...
📅  最后修改于: 2020-10-15 03:08:29        🧑  作者: Mango
合并排序合并排序是遵循分而治之的算法。考虑一个n个元素的数组A。该算法分3个步骤处理元素。如果A包含0或1个元素,则它已经被排序,否则,将A分成元素数量相等的两个子数组。征服意味着使用合并排序对两个子数组进行递归排序。合并子数组以形成单个最终排序的数组,以保持数组的顺序。合并排序的主要思想是,简短列表的排序时间更少。复杂ComplexityBest caseAverage CaseWorst Ca...
📅  最后修改于: 2020-10-15 03:09:59        🧑  作者: Mango
快速排序快速排序是广泛使用的排序算法,该算法在平均情况下对n个元素的数组进行n log n个比较。该算法遵循分而治之的方法。该算法以以下方式处理数组。将数组的第一个索引设置为left和loc变量。将数组的最后一个索引设置为right变量。即left = 0,loc = 0,en d = n-1,其中n是数组的长度。从数组的右边开始,从右到右扫描整个数组,将数组的每个元素与loc指向的元素进行比较。...
📅  最后修改于: 2020-10-15 03:11:35        🧑  作者: Mango
基数排序基数排序处理元素的方式与根据学生姓名的字母顺序对其排序的方式相同。在这种情况下,由于英语中有26个字母,因此有26个基数。在第一遍中,根据名称的第一个字母的升序对名称进行分组。在第二遍中,根据第二个字母的升序对名称进行分组。继续相同的过程,直到找到名称的排序列表。存储桶用于存储每次通过时产生的名称。通过次数取决于带有最大字母的姓名的长度。对于整数,基数排序会根据数字对数字进行排序。在从LS...
📅  最后修改于: 2020-10-15 03:13:16        🧑  作者: Mango
选择排序在选择排序中,每次通过都会选择数组中未排序元素中的最小值,并将其插入数组中的适当位置。首先,找到数组的最小元素并将其放在第一个位置。然后,找到数组的第二个最小元素并将其放在第二个位置。这个过程一直持续到我们得到排序数组为止。使用选择排序算法的n-1遍对具有n个元素的数组进行排序。在第一遍中,将找到数组的最小元素及其索引pos。然后,交换A [0]和A [pos]。因此,对A [0]进行了排...
📅  最后修改于: 2020-10-15 03:14:32        🧑  作者: Mango
贝壳排序壳排序是插入排序的一般化,它通过比较由多个位置的间隙分隔的元素来克服插入排序的缺点。通常,Shell sort执行以下步骤。步骤1:以表格形式排列元素,并使用插入排序对列进行排序。步骤2:重复步骤1;每次只有较少数量的较长列,这样一来,最终只有一列数据需要排序。复杂ComplexityBest CaseAverage CaseWorst CaseTime ComplexityΩ(n log...
📅  最后修改于: 2020-10-15 03:15:51        🧑  作者: Mango
双音排序Bitonic排序是一种并行排序算法,它执行O(n2 log n)比较。尽管比较的数量比任何其他流行的排序算法都多,但是它对并行实现的效果更好,因为按预定义的顺序对元素进行了比较,而不必依赖于要排序的数据。预定义的序列称为Bitonic序列。什么是双音序列?为了了解Bitonic排序,我们必须了解Bitonic序列。重音序列是这样的序列,其中元素首先按升序排列,然后在某些特定索引后开始递减...
📅  最后修改于: 2020-10-15 03:18:12        🧑  作者: Mango
鸡尾酒排序鸡尾酒排序是冒泡排序的一种变体,它交替在两个方向上遍历列表。它与冒泡排序不同之处在于,冒泡排序仅在向前方向上遍历列表,而该算法在一次迭代中既向前又向后遍历。算法在鸡尾酒式排序中,一个迭代包括两个阶段:第一阶段像从左到右的气泡排序那样遍历整个数组。比较相邻元素,如果left元素大于right元素,则我们交换这些元素。列表中的最大元素位于正向传递中的数组末尾。第二阶段从最右边的未排序元素到左...
📅  最后修改于: 2020-10-15 03:19:45        🧑  作者: Mango
循环排序循环排序是一种比较排序算法,它强制将数组分解为循环数,每个循环都可以旋转以产生排序的数组。从某种意义上说,这是最佳的,因为它可以减少对原始数组的写入次数。算法考虑n个不同元素的数组。给定一个元素a,可以通过计算小于a的元素数量来计算a的索引。如果发现该元素在其正确位置,则只需保持原样。否则,用数小于一个元素的总数找到的正确位置。它必须存在于已排序数组中的位置。被替换的另一个元素b将移动到其...