
数据结构与算法
文章平均质量分 79
庄生晓梦o
博客为个人学习记录
展开
-
数据结构与算法:计数排序
计数排序(Counting Sort)是一种非比较型的排序算法,适用于对整数或有限范围内的数据进行排序。它的核心思想是通过统计每个元素的出现次数,然后根据统计结果将元素放回正确的位置。计数排序的,其中 n 是待排序元素的数量,k 是数据的范围大小。空间复杂度O(n + k),需要额外的计数数组和结果数组。计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。原创 2025-03-13 01:41:24 · 324 阅读 · 0 评论 -
数据结构与算法:归并排序
时间复杂度:空间复杂度:稳定性:稳定归并排序是一种稳定的排序算法,即相同元素的相对顺序在排序过程中不会改变。归并排序的时间复杂度为O(nlogn),其中n是待排序数据的数量。这意味着无论数据是已经部分排序还是完全无序,归并排序都能保持较高的效率。归并排序的空间复杂度为O(n),因为它需要额外的空间来合并两个已排序的子数组。这意味着在内存有限的情况下,使用归并排序可能需要额外的考虑。然而,在大多数情况下,这种空间消耗是可以接受的,因为归并排序的高效性和稳定性往往能够抵消其空间复杂度的不足。原创 2025-03-12 23:12:33 · 882 阅读 · 0 评论 -
数据结构与算法:快速排序
快速排序(Quick Sort)是一种高效的排序算法,采用分治法的策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。快速排序的基本思想是选择一个“基准”元素,将元素分为两部分:比基准小的元素和比基准大的元素,然后递归地对这两部分进行排序。小区间优化可以在一定程度上提高快速排序的性能。小区间优化是指在快速排序中,当待排序的子序列的长度小于一定阈值时,不再继续使用快速排序,而是转而使用直接插入排序。通过使用栈来模拟递归的过程,非递归实现避免了递归调用的开销,提高了快速排序的效率。原创 2025-03-11 13:38:46 · 692 阅读 · 0 评论 -
数据结构与算法:堆排序
堆排序使用堆来选数,效率高了很多时间复杂度:空间复杂度:稳定性:不稳定空间效率:堆排序是一种原地排序算法,这意味着它不需要额外的存储空间来辅助排序过程,除了原数组本身。这使得堆排序在处理大数据集时,相较于其他需要额外空间的排序算法,具有更高的空间效率。时间效率:堆排序的时间复杂度在最坏情况下为O(nlogn),其中n是待排序元素的数量。这意味着无论输入数据的初始状态如何,堆排序都能保持相对稳定的性能。原创 2025-03-05 17:45:41 · 433 阅读 · 0 评论 -
数据结构与算法:选择排序
选择排序是一种简单直观的排序算法,其基本思想是:从待排序的数据元素中,每次选择最小(或最大)的元素,将其与序列的起始位置交换,然后继续对剩余的元素进行排序,知道整个序列排序完成。原创 2025-03-04 22:20:01 · 319 阅读 · 0 评论 -
数据结构与算法:希尔排序
初始时,整个序列被分成多个子序列,每个子序列包含相隔一定增量的元素。随着增量的逐渐减小,子序列的元素逐渐合并,最终当增量减至1时,整个序列完成排序。这种方法是一组一组的走完,先走完红色的,让它成为有序,然后再走绿色的,最后走蓝色的。gap = gap / 3 + 1,不管gap为什么值,都可以保证gap最后都为1,当gap==1时相当于一次直接插入排序,结果为有序。希尔排序又称缩小增量排序,它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。原创 2025-03-03 20:59:50 · 363 阅读 · 0 评论 -
数据结构与算法:插入排序
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。在其实现过程中使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。原创 2025-03-02 10:17:59 · 467 阅读 · 0 评论 -
数据结构与算法:二叉树
这个while循环结束后吗,二叉树中的所有结点全部过了一遍,就算有 没有入队列的结点,也没有关系,因为这时只需要判断现在的队列中,是否还存在数据,如果存在,则说明不是完全二叉树,返回false。但是一定要记录这个节点,因为递归返回会销毁函数栈帧,你不返回给上层这个找到的节点的记录,上层不知道你找到没有,就认为没有找到。比如说,求第3层结点的个数,那么对这棵树的第一层来说,从它开始,求它向下的3层。2、在操作系统中,树是一种用于表示文件系统的结构,其中根目录位于树的顶部,子目录和文件位于根目录下 [3]。原创 2025-02-27 15:47:58 · 1078 阅读 · 0 评论 -
数据结构与算法:堆
二叉树一般用链式存储,用顺序存储比较困难。但是有一种特殊的二叉树可以用顺序存储,那就是堆。原创 2025-02-26 01:53:01 · 911 阅读 · 0 评论 -
数据结构与算法:栈和队列
/柔性数组,存储栈元素int top;//栈顶//容量}ST;}QNode;int size;}Queue;原创 2025-02-25 14:38:41 · 380 阅读 · 0 评论 -
数据结构与算法:双向链表
newnode的next指针指向pos的next指针指向的节点,newnode的prev指针指向pos节点,pos的next指针指向的节点的prev指针指向newnode,pos的next指针指向newnode。先让newnode的next指针指向最后一个数据,newnode的prev指针指向哨兵卫,再让第一个有效数据的prev指针指向newnode,哨兵卫的next指针指向newnode就完成了头插。让pos节点的next指向的节点和prev指向的节点连接起来,然后释放pos节点,将pos节点置为空。原创 2025-01-08 21:57:07 · 964 阅读 · 0 评论 -
链表OJ题(一)
找中间节点采用一个快慢指针,然后将找到的中间节点传给revers函数,开始逆置后半部分的节点。创建一个指针new用来存储头节点的下一个节点,然后改变头节点的指向让它指向newnode。例如,共有4个数据,要返回倒数第2个节点的值,因为pcur指向头节点,所以只需要走2步就到了倒数第2个节点的位置上,然后返回该点的值。思路:在每个原节点的后面插入一个复制节点,将原节点和复制节点连接起来。然后快指针先走k步,然后快慢指针同时走,当快指针走为空的时候,慢指针刚好走到倒数第k个节点上,它们之间的距离为k。原创 2025-01-06 22:55:17 · 951 阅读 · 0 评论 -
单链表的实现(C语言)
创建一个指针 ptail 让它指向链表的头节点,如果链表不为空,就找到链表的尾部,只需要 ptail 的下一个节点为空,那么此时ptail就是链表的尾部,然后让 ptail 的下一个节点指向新增节点newnode就完成了尾插操作。然后创建一个指向头节点的指针,遍历链表,通过while循环这个指针的下一个节点不指向pos,那么循环结束的时候它就是pos的前一个节点。从头开始销毁链表是最好的,创建一个指针指向头节点的下一个节点,然后销毁头节点,最后让头节点的下一个指针成为新的头节点,遍历销毁链表。原创 2024-09-25 22:24:42 · 1166 阅读 · 1 评论