- 博客(31)
- 收藏
- 关注
原创 【C-查找算法】哈希查找
建哈希表(哈希表下标是原数组元素经过哈希函数处理后的哈希值,哈希表值是原数组元素的下标或地址)哈希冲突:两个不同数组元素,对应的哈希值是一样的,在哈希表的同一位置上。将待查找值,经过哈希函数处理后,在哈希表中查询。输出:找到就返回目标值的下标,找不到返回-1。时间复杂度:建哈希表O(n),查询O(1)输入:数组地址,数组长度,待查找的目标。解决哈希冲突:开放寻址法、链表法。1.0 哈希表在查找函数内。有可能会触发哈希冲突。
2024-09-05 23:26:30
456
原创 【C-实践】文件服务器(2.0)
使用了tcp+epoll+进程池,实现文件下载服务器退出方式:采用温和手段,通知子进程让其自己退出(在1.0的基础上,修改了sendFd和recvFd函数,多加了一个退出标志位参数,用来指定子进程是否退出)传输方式:采用零拷贝的方式完成(文件内容不再经过用户态缓冲区,直接从内核缓冲区发送出去)(在1.0的基础上,增加了函数)
2024-09-05 13:59:39
745
原创 【C-查找算法】二分查找
排序后,只要范围大于1,就进入查找,目标值先跟数组中间值比。输出:找到就返回目标值的下标,找不到返回-1。输入:数组地址,数组长度,待查找的目标。时间复杂度:O(logn)
2024-08-26 14:31:02
181
原创 【C-排序算法】计数排序
核心思想:利用数组的随机访问特点,建立统计数组(下标为原数组的值,值为原数组值的次数)空间复杂度:O(n)【在原数组上合并时】,O(n * logn)【复制数组进行合并时】count数组的下标,就是原数组的元素(元素不是正数是,需要建立元素和下标的映射)利用原数组元素的取值范围,如 [0, M),建立一个统计数组count[M]count数组的值,就是原数组元素出现的次数。时间复杂度:O(n)【用在建表上的时间】通过遍历count数组,重建原数组。输入:数组地址,数组长度。输出:升序排列的数组。
2024-08-26 11:25:08
178
原创 【C-排序算法】归并排序
空间复杂度:O(n)【在原数组上合并时】,O(n * logn)【复制数组进行合并时】输入:数组地址,数组首元素下标,数组尾元素下标。时间复杂度:O(n * logn)将数据平均分成左右两份。最后有序合并左右两份。输出:升序排列的数组。
2024-08-26 09:38:42
497
原创 【C-排序算法】堆排序
时间复杂度:O(n * logn)【建堆需要O(n),调整堆需要O(n * logn)】具体排序步骤: 对N个数建立大根堆。核心思想:利用堆数据结构的特点。堆排序的步骤,n为数据规模。输入:数组地址,数组长度。空间复杂度:O(1)输出:升序排列的数组。
2024-08-26 09:11:25
402
原创 【C-排序算法】qsort库函数(非递归版的快速排序)
利用栈数据结构模拟递归调用,堆空间的大小远远大于栈空间,避免栈溢出。时间复杂度:平均和最好O (logn * n),最坏O (n^2)输入:数组地址,数组长度,数组元素的大小,比较函数指针。qsort.c (比较数组元素大小的函数)空间复杂度:O(logn),用来存分割器。print.c (打印数组元素的函数)输出:升序排列的数组。
2024-08-25 15:11:28
187
原创 【C-排序算法】快速排序(递归版)
快速排序是每次选择一个分割器(一般选当前范围的最后一个),比它大的放它右边,比它小的放它左边,再递归调用直到范围
2024-08-25 11:57:17
264
原创 【C-排序算法】希尔排序
多了一个外层循环,控制每次插入排序的增量,也称步长gap,gap一开始是长度除2,后面每次gap都除2递减,直到gap为1时。在内层循环 j 中涉及1的部分都替换成gap,同时 i 每次的起始插入点从 gap 开始。在数量少时,比快排和堆排快。但大量数据时,希尔排序还是比快速排序慢的,因为希尔编写较复杂。空间复杂度:O(1),是原地排序算法。时间复杂度:O(n^1.3)输入:数组地址,数组长度。是缩小增量的插入排序。输出:升序排列的数组。
2024-08-25 09:44:17
228
原创 【C-排序算法】插入排序
由于较高时间复杂度,不适合大规模数据的排序。实际开发中,常用更高效的排序算法(快排、堆排、归并、计数等)。如果有n个元素,分成两堆,A堆(手牌)是已经排序好的,B堆(牌堆)是没排序的。时间复杂度:最坏和平均的是O(n^2),最好的是O(n)空间复杂度:O(1),是原地排序算法。B堆的变化,从n - 1到0。将B堆的元素挨个有序插入A堆。输入:数组地址,数组长度。A堆的变化,从1到n。输出:升序排列的数组。
2024-08-24 16:52:44
248
原创 【C-排序算法】选择排序
由于较高时间复杂度,不适合大规模数据的排序。实际开发中,常用更高效的排序算法(快排、堆排、归并、计数等)。时间复杂度:最坏和平均的是O(n^2),最好的是O(n)空间复杂度:O(1),是原地排序算法。如果有n个元素,就找n-1次。输入:数组地址,数组长度。输出:升序排列的数组。
2024-08-24 16:19:24
146
原创 【C-排序算法】冒泡排序
由于较高时间复杂度,不适合大规模数据的排序。实际开发中,常用更高效的排序算法(快排、堆排、归并、计数等)。每次遍历完后最后一个元素就是最大值,长度减一,找剩余元素最大值,直到数量为2时。时间复杂度:最坏和平均的是O(n^2),最好的是O(n)
2024-08-24 15:51:53
177
原创 【C-数据结构】二叉树的插入(建树)
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。有两个子树,左子树(left subtree)和右子树(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
2024-08-24 10:56:46
400
原创 【C-数据结构】单向链表,不带头节点(int)
按位查找(参数:链表地址,待查询位置)按位修改(参数:链表地址,待修改位置)按值删除(参数:链表地址,待删除值)按位删除(参数:链表地址,删除位置)按值查找(参数:链表地址,待查询值)按值修改(参数:链表地址,待修改值)有序插入(参数:链表地址,插入值)头插(参数:链表地址,插入值)尾插(参数:链表地址,插入值)初始化(参数:链表地址)判空(参数:链表地址)销毁(参数:链表地址)
2024-08-22 11:44:02
1041
原创 【C-项目】学生信息管理系统
简单分为4个部分一、读取配置文件(账户文件、学生信息文件)二、登录账户界面三、功能选择界面(普通权限、管理员权限)四、更新文件内容(退出时自动调用)
2024-08-21 15:15:07
1555
空空如也
在一个函数内,已知一个指向数组的指针,求得该数组的长度?
2023-11-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人