
数据结构
文章平均质量分 83
cloues break.
这个作者很懒,什么都没留下…
展开
-
堆排序----C语言数据结构
堆排序的排序过程包括了 n-1 次交换和堆调整的操作。因此,排序过程的总时间复杂度为 O((n-1) * log n),约等于O(n log n)。构建最大堆的时间复杂度是O(n),其中 n 是待排序序列的长度。堆排序的时间复杂度是相对较好的,且具有原地排序的特点。然而,需要注意的是,堆排序在实际应用中可能会因为其不具备稳定性(相同元素的相对位置可能发生变化)和对缓存的不友好等原因而被其他算法替代。虽然堆排序的时间复杂度较好,但在实际应用中,由于其不具备插入和删除操作的优势,因此在一些特殊方面很少被选择。原创 2024-02-09 22:53:56 · 776 阅读 · 0 评论 -
插入排序、希尔排序----C语言数据结构
该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数gap(小于序列元素总数)作为间隔,所有间隔为gap的元素放在同一个逻辑数组中,在每一个逻辑数组中分别实行直接插入排序。:在平均情况下,插入排序的时间复杂度为 O(n^2)。这是因为对于每个未排序的元素,平均需要比较 n/2 次(在有序的部分中找到插入位置),而每次比较的复杂度是 O(1)。希尔排序又称为缩小增量排序,是对之前介绍的插入排序的一种优化版本,优化的地方在于:不用每次插入一个元素时,就和序列中有序部分中的所有元素进行比较。原创 2024-02-04 20:59:19 · 929 阅读 · 0 评论 -
选择排序、冒泡排序----C语言数据结构
在最坏的情况下,即输入数组是逆序的状态,选择排序每次都需要比较未排序部分的所有元素,找到最小值,然后进行交换。对于长度为 n 的数组,第一次需要比较 n 次,第二次需要比较 n-1 次,以此类推,总的比较次数是 n + (n-1) + (n-2) + …冒泡排序是比较基础的排序算法之一,其思想是相邻的元素两两比较,较大的数下沉,较小的数冒起来,这样一趟比较下来,最大(小)值就会排列在一端。最优:待排序数组是有序的,此时,内层的循环不用交换,只有外层循环遍历,所以时间复杂度为O(n^2)原创 2024-02-04 20:58:31 · 1289 阅读 · 0 评论 -
快速排序的多种实现方式----C语言数据结构
尽管快速排序是一种高效的排序算法,但它也有一些缺点。以下是一些常见的快速排序缺点:不稳定性: 快速排序是一种不稳定的排序算法。如果原始数据中存在相等元素,它们在排序后的相对顺序可能被改变,这与稳定性排序算法的特性相违背。对重复元素的敏感性: 当待排序的数据中存在大量重复元素时,快速排序的性能可能下降。这是因为在分区过程中,相同的元素可能被分到不同的子数组中,导致递归深度增加,性能减弱。对已经有序的数据表现差: 如果输入数据已经近乎有序,快速排序的性能会明显减弱。原创 2024-01-31 16:45:42 · 1029 阅读 · 0 评论 -
归并排序----C语言数据结构
在最坏情况下,递归树的深度达到 log n ,因此空间复杂度是 O(log n)。的排序算法,它的基本思想是将原始数组划分成较小的数组,然后递归地对这些小数组进行排序,最后将排好序的小数组合并成一个整体有序的数组。将一个数组分成许多个小数组(直到最后单个数组有序,也就是只有一个元素),再将这些有序的小数组递归,由下往上返回。归并排序是一种稳定的排序算法,其时间复杂度为 O(n log n),这使得它在大规模数据集上具有较好的性能。递归的算法类似于二叉树后序遍历的时间复杂度,也就是递归深度,log n。原创 2024-01-31 16:44:23 · 451 阅读 · 0 评论 -
【无标题】
完全二叉树是一种特殊的二叉树,其中每一层,除了最后一层外,都是完全填充的,并且所有节点都尽可能地向左对齐。这里我们将解析为什么具有n个结点的完全二叉树的深度为 ([ \log_2 n ] + 1) 或者 ([ \log_2 (n+1) ])。这就是具有 (n) 个结点的完全二叉树的深度为 ([ \log_2 n ] + 1) 或者 ([ \log_2 (n+1) ]) 的解析。这个不等式的左边表示深度为 (d-1) 的二叉树最多的节点数,右边表示深度为 (d) 的二叉树最多的节点数。转载 2024-01-17 21:48:17 · 58 阅读 · 0 评论 -
二叉树的实现----C语言数据结构
用一个数组构建二叉树,将数组的每一个元素,像前序遍历一样,第一个赋予根节点,第二个根节点的左子树,第三个根结点的右子树,以此类推:值先给父节点,再给父节点的左子树,再给父节点的右子…在二叉树的销毁中,采用后序遍历是最佳的,因为对比中序和前序,当遍历到此结点时,销毁此节点,会丢失此节点的左右子树结点,不利于遍历到下一个结点.(当然可以设置临时变量记录此节点也是可以实现的)这里下标用的指针,是因为函数栈帧,在递归的时候,若传的是int pi ,那么这个值不会受上一个函数中的pi++影响,pi的值不会改变.原创 2024-01-17 13:59:33 · 991 阅读 · 0 评论 -
线性表的从上而下----顺序表与链表
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。而插入的第一个结点,要把它变成指向一块区域的结构体指针,需要改变它的值(指针)在之前都知道,int max(int x, int y)并不改变原有的值,只是形参的复制,这里也是一样。先找到需要插入所需的位置,这里以找到val的值,然后插入到val的前面 为例。的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。在实际上的物理结构是没有联系的。原创 2023-12-10 17:22:07 · 128 阅读 · 1 评论