- 博客(14)
- 收藏
- 关注
原创 哈夫曼树(Huffman Tree) c语言实现
哈夫曼树(Huffman Tree)是一种用于压缩数据的数据结构。哈夫曼树是一种二叉树,它的每个节点都有一个权重,表示该节点在编码中出现的频率。
2024-03-27 16:36:15
462
原创 字典-c语言简单实现
优化建议:使用指针指向动态内存的方式存储键和值,为值提供比较回调函数,使用键和值时需将动态内存中的数据转化为相应类型。优化建议:按键值对键值对进行排序,使用二分查找进行键值对的搜索。或使用红黑树或AVL树存储键值对。我的这段代码简单实现了实现了数据结构的字典,我采用线性表对键值对进行了简单存储。1.没有对键的查找进行优化,当数据量较大时,查找效率非常低。数据结构字典是一种以键值对形式存储数据的数据结构。2.键和值的类型是固定的,代码复用率低。
2024-03-27 15:47:27
552
原创 平衡二叉树的创建、插入和删除操作 C语言实现
当二叉搜索树中的节点按照某种顺序插入,导致树的一边过长,另一边过短时,树就会变得不平衡。不平衡的二叉搜索树在插入、删除和查找操作时,效率会降低,最坏情况下会变成一条线性链表,时间复杂度变为O(n)。为了解决这一问题,和二叉搜索树进行优化,提出了平衡二叉树这一概念平衡二叉树,也称为AVL树或高度平衡的二叉搜索树。在平衡二叉树中,任何一个节点的两个子树的高度差都不超过1,这使得它特别适合用于排序和查找操作。平衡二叉树的节点除了包含值、左子节点和右子节点的指针,还增加了一个高度值。
2024-03-24 18:40:13
1478
1
原创 十大排序算法-桶排序 c语言实现
函数bucketSortbase: 整数数组,需要排序的数组。len: 整数,数组的长度。: 整数,桶的数量。桶排序适用于数据分布比较均匀的情况,对于数据分布极端不均匀的情况,可能会导致性能下降。桶排序的时间复杂度为O(n+k),其中n为数组长度,k为桶数量。当桶数量增加时,消耗的内存也会增加。
2024-03-08 09:44:48
340
1
原创 十大排序算法-计数排序 c语言实现
函数接受两个参数:一个整数数组base和一个整数len,表示数组的长度。函数的目的是对数组base进行计数排序,并将排序后的结果存储在原数组base中。计数排序适用于数据范围较小且基本有序的数据排序。在某些情况下,计数排序可以作为其他排序算法的预处理步骤,以提高排序效率。计数排序的时间复杂度为 O(n+k),其中 n 是输入数组的长度,k 是输入数组中的最大值与最小值的差值。空间复杂度为 O(k)。
2024-03-08 09:35:46
223
1
原创 十大排序算法-快速排序 c语言实现
快速排序是一种不稳定排序算法,在某些情况下,可能会产生最坏情况,即时间复杂度为O(n^2)。为了避免这种情况,可以采用随机化的方式选择基准元素,或者使用其他更高效的排序算法。
2024-03-07 16:40:01
529
1
原创 十大排序算法-归并排序 c语言实现
归并排序的时间复杂度为O(n log n),空间复杂度为O(n)。它是一种稳定的排序算法,适用于大规模的数据排序。
2024-03-07 15:55:37
408
1
原创 十大排序算法-堆排序 c语言实现
堆排序算法是一种原地排序算法,不需要额外的存储空间。堆排序算法的时间复杂度为O(nlogn),空间复杂度为O(1)。堆排序算法在处理部分有序的序列时,效率较高。
2024-03-07 13:38:35
1349
1
原创 十大排序算法-插入排序 c语言实现
base(指向数组的指针),len(数组长度),width(数组中每个元素的大小),以及compare(一个比较函数,用于比较两个元素的大小)。插入排序的时间复杂度为O(n^2)。插入排序在实现上,通常采用in-place排序,不需要额外的存储空间。插入排序的算法简单,容易理解。插入排序适用于数据量较小或者部分已经排序的数组,对于大量数据的排序,插入排序的效率较低。插入排序的时间复杂度为O(n^2),在效率上不如其他高效的排序算法,如快速排序、归并排序等。
2024-03-06 14:39:48
291
1
原创 十大排序算法-选择排序 c语言实现
函数base(指向数组的指针),len(数组长度),width(数组中每个元素的大小),以及compare(一个比较函数,用于比较两个元素的大小)。这个函数可以用于对任意类型的数组进行排序,只需提供相应的比较函数即可。双向选择排序的时间复杂度仍然为 O(n^2),但因为它每次可以同时移动两个元素,所以在某些情况下,它的实际效率可能比普通的插入排序更高。
2024-03-06 13:17:09
233
原创 十大排序算法-冒泡排序 C语言实现
void* base: 指向要排序数组的指针。int len: 数组的长度。int width: 数组中每个元素的大小。: 一个比较函数,用于比较两个元素的大小。冒泡排序的时间复杂度为 O(n^2),空间复杂度为 O(1)。当数据量较大时,冒泡排序的效率较低。
2024-03-05 16:38:27
255
原创 自己封装一个简单动态数组,纯C语言实现
动态数组(也称为可变数组)是一种可以自动增长容量的数组。在某些编程语言中,数组的长度是固定的,如果需要添加新的元素,就需要创建一个新的数组。而在动态数组中,数组的长度可以根据需要自动增长,这样就避免了因数组容量不足而需要重新分配内存的情况。因此在某些情况下,使用静态数组(也称为固定数组)可能会更加高效。静态数组在初始化时确定数组的长度,如果在使用过程中需要添加新的元素,可以通过扩展数组来解决。在实际编程中,应该根据具体需求和资源限制来选择使用动态数组还是静态数组。
2024-03-01 16:42:50
145
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人