随笔分类 -  数据结构笔记

置换—选择排序
摘要:置换——选择排序 土办法构造初始归并段 同时最多放两个到输入缓冲区,只能读入两块的内容,然后把这些记录在内存排序之后,在输出写回外存,这样就得到了一个初始归并段。 由于内部排序的内存工作区只能容纳6个记录(例子)。 可以用一片更大的内存区域来进行内部排序(如:可容纳18个记录) 用于内部排序的内存工
2060
0
0
最佳归并树
摘要:最佳归并树 归并树的神秘性质 读写磁盘需要2*(6+8+14+16) 每个初始归并段看作一个叶子结点,归并段的长度作为结点权值,则上面这颗归并树的带权路径长度WPL=2 * 1+(5+1+6+2) * 3 = 44 =读磁盘的次数 = 写磁盘的次数 WPL:结点值*到根节点的路径长度 重要结论:归并
3488
0
0
败者树
摘要:败者树 多路平衡归并带来的问题 外部排序时间开销=读写外存的时间+内部排序所需时间+内部归并所需 时间 S=logkr,kS 使用k路平衡归并策略,选出一个最小元素需要对比关键字(k-1)次, 导致内部
1975
0
0
外部排序
摘要:外部排序 外存和内存之间的数据交换 操作系统是以“块”为单位对磁盘存储空间进行管理,如:每块大小1KB各个磁盘块内存放着各种各样的数据 磁盘的读/写以“块”为单位进行的。 外部排序原理 使用“归并排序”的方法,最少只需要在内存当中分配3块大小的缓冲区就可以完成对任意大小的文件进行排序。 归并排序:把
876
0
1
基数排序(Radix Sort)
摘要:基数排序(Radix Sort) 第一趟:个位 收集: 第二趟:十位 第三趟:百位 3元组 基数排序——不是基于“比较”的排序算法 递增就是把收集的过程返过来 算法效率分析 需要r个辅助队列,空间复杂度 = O(r) 一趟分配O(n),一趟收集O(r),总共d趟分配、收集,总的时间复杂度=O(d(n
175
0
0
归并排序
摘要:归并排序 什么是Merge(归并/合并)? 归并:把两个或多个已经有序的序列合并成一个 首先先定义一个更大的数组 接下来可以分别设定指针指向数组的第一个元素 再来就是把指向合并的散装数组里的元素进行对比。。谁小谁进大数组 只剩下一个子表未合并时,可以将该表中剩余元素全部加到总表 “2路”归并 把两个
708
0
0
堆——插入删除
摘要:堆——插入删除 i2i i2i+1 ii/2 在堆中插入新元素 首先放到表尾的位置,堆底 然后就恢复堆的顺序就好。大小根堆 大根堆:根>左右 在堆中删除元素 被删除的元素用堆底元素替代,然后在恢
228
0
0
堆排序
摘要:堆排序 选择排序: 简单选择排序 堆排序 选择排序:每一趟在待选择元素中选取关键字最小(或最大)的元素加入有序子序列 难理解!! 什么是“堆(Heap)”? 若n个关键字序列L[1...n] 满足下面某一条性质,则称为堆(Heap): 若满足:L(i)≥L(2i) 且L(i)≥L(2i+1) (1≤
915
0
0
快速排序
摘要:快速排序 交换排序: 冒泡排序 快速排序 算法思想: 先找一个基准元素,比它小的往左去,比它大的往右去。 分成左右两块重复操作。 不断划分,左边都小于基准元素,右边都大于基准元素。 代码(非常重要!!!) //用第一个元素将待排序序列划分成左右两个部分 int Partition(int A[],i
198
0
0
冒泡排序
摘要:冒泡排序 交换排序: 冒泡排序 快速排序 基于“交换“的排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置 定义 从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换他们,直到序列比较完,称这样过程为”一趟“冒泡排序 操作示意 两个两个比较,让
153
0
0
希尔排序(Shell Sort)
摘要:希尔排序(Shell Sort) 先追求表中的部分元素有序,再逐渐逼近全局有序 定义和操作步骤 先将待排序表分割成若干行形如L[i,i+d,i+2d,...,i+kd]的“特殊”子表,对各个子表分别进行直接插入排序。缩小增量d,重复上述过程,直到d=1为止 把相对的位置的大小顺序不对的对调。 第二趟
141
0
0
插入排序
摘要:插入排序 每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列中,直到全部记录插入完成 算法实现 //直接插入排序 void InsertSort(int A[] , int n){ int i,j,temp; for(i=1;i<n;i++){ //将各元素插入已经排好序的序列中 if
159
0
0
排序
摘要:排序 排序,按照关键字递增或递减重新排列一遍。 排序算法的评价指标 时间复杂度 空间复杂度 算法的稳定性。 排序算法的分类 内部排序:数据都在内存中 外部排序:数据太多,无法全部放入内存 外部排序,除了关注时间复杂度和空间复杂度,还需要关注读/写磁盘次数 知识回顾
104
0
0
散列(哈希)查找
摘要:散列查找 散列表(Hash Table) 散列表(Hash Table),又称哈希表,是一种数据结构,特点是:数据元素的关键字与其存储地址直接相关 如何建立“关键字”与“存储地址”的联系? 通过“散列函数(哈希函数)”:Addr=H(key) 若不同的关键字通过散列函数映射到同一个值,则称他们为“同
1232
0
0
B+树
摘要:B+树 和分块查找有点类似 B+树的查找 对比大小,小于等于左下角,大于等于右下角 也可以顺序查找 B+树 VS B树 知识回顾
128
0
0
B树——插入和删除
摘要:B树——插入和删除 B树的插入 5阶B数——结点关键字个数向上取整m/2-1≤n≤m-1 即2≤n≤4 连续插入5个元素后,超出来了。 在插入key后,若导致原结点关键字数超过上限,则从中间位置(m/2向上取整)将其中的关键字分为两个部分,左部分包含的关键字放在原结点中,右部分包含的关键字放在新节点
3088
3
4
B树
摘要:B树 难点。 回顾:二叉查找树(BST) typedef struct{ int key; struct BSTNode *lchild,*rchild; }BSTNode,*BSTree; 能否变为m叉查找树? 五叉查找树 struct Node{ ElemType keys[4]; //最多4个
164
0
0
分块查找
摘要:分块查找 算法思想 查找效率分析(ASL) 分块查找的算法思想 特点:块内无序,块间有序 //索引表 typedef struct{ ElemType maxvalue; int low,high; }Index; //顺序表存储实际元素 ElemType List[100]; 在索引表中确定待查找
1710
0
0
折半查找
摘要:折半查找 算法思想 算法实现 查找判定树 折半查找效率 折半查找的算法思想 折半查找,又称“二分查找”,仅适用于有序的顺序表 33>mid,往右查 右指针到一个位置就-1,左指针到一个位置就+1 low>high,查找失败 折半查找的实现 typedef struct{ ElemType *elem
2368
0
0
顺序查找
摘要:顺序查找 算法思想 算法实现 算法优化 顺序查找的算法思想 顺序查找,又叫“线性查找”,通常用于线性表 从头到尾查 顺序查找的实现 typedef struct{ //查找表的数据结构(顺序表) ElemType *elem; //动态数组的基址 int TableLen; //表的长度 }SSTa
433
0
1
点击右上角即可分享
微信分享提示
深色
回顶
收起