数据结构与算法
igaobinbin
这个作者很懒,什么都没留下…
展开
-
查找(2)--查找算法
1.顺序表查找又称线性查找,是最基本最简单的查找技术,它从表中的第一个或最后一个开始逐个与给定项比对。 2.有序表查找:对线性表做了有序排列后再做查找。常用的方法有折半查找(二分查找)、插值查找、斐波那契查找等。 3.索引查找 事实上服务器等的数据增长非常快,这种海量数据通常是按时间先后顺序存储的,对其排序的代价高昂。对于这样的查找表一般使用索引技术。索引就是把一个关键字与它对应的记录相关联...原创 2018-07-18 16:12:31 · 159 阅读 · 0 评论 -
排序(7)--快速排序
一、基本快速排序 1、快速排序本质上是冒泡排序的升级版,都属于交换排序;它的实现是增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,将关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动交换次数。 2、快速排序的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的小,则可对这两部分记录进行排序,以达到整个序列有序的目的。...原创 2018-08-08 20:52:08 · 252 阅读 · 0 评论 -
排序(6)--归并排序
1、前面说到直接插入排序的效率要比选择和冒泡高,特别是对于基本有序的序列,直接插入排序更有优势;而归并排序就是利用这种特点,先使子序列基本有序,然后逐渐合并序列(利用插入),最后使整个序列有序。归并在数据结构中的定义就是将两个或两个以上的有序表组合成一个新表的过程;归并排序就是利用归并的思想实现的排序的方法,它的原理是:假设有n个记录,则可以看成n个有序子序列(每个子序列长度为1),然后两两归并得...原创 2018-07-29 19:39:09 · 222 阅读 · 0 评论 -
排序(5)--堆排序
1.堆 堆这种数据结构其实就是完全二叉树,堆分为两种,大顶堆和小顶堆。因此,堆是具有下列性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值称为大顶堆;每个节点的值都小于或等于其左右孩子节点的值称为小顶堆。 2.堆排序算法 堆排序就是利用堆这种数据结构进行排序的方法。它的基本思想是:将待排序序列构造成一个大顶堆或小顶堆,此时最大值或最小值就是堆顶的根节点,然后将其取出放入数组;然后对...原创 2018-07-26 18:45:01 · 407 阅读 · 0 评论 -
排序(3)--简单选择排序
简单选择排序原理很简单,就是该出手时再出手,话不多说,先上代码: void SelectSort(SqList *L) { int i,j,min; //min为最小值下标 for(i=1;i < L->length;i++){ min=i; //将最小值下标置为当前下标 for(j=i+1;j <= L->length...原创 2018-07-20 14:30:04 · 138 阅读 · 0 评论 -
排序(2)--冒泡排序
冒泡排序有三种写法,第一种严格意义上来说不是冒泡排序,只是简单的交换排序,效率低下,此处不说,只介绍第二和三种。 1.基本冒泡排序 //对表L做冒泡排序 void BubbleSort(SqList *L) { int i, j; for(i=1;i < L->length;i++){ for(j=L->length-1;j >= i;...原创 2018-07-20 10:49:23 · 125 阅读 · 0 评论 -
排序(1)--基本概念
1.对含有n个记录的序列,使其成为一个按关键字有序的序列的操作称为排序。 2.排序可以按一个关键字,也可以按多个关键字组合排序。 3.直接在内存中操作的称为内排序,需要内外存交互的称为外排序。 4.基本的简单排序算法有:冒泡排序、简单选择排序、直接插入排序;改进的排序算法有:希尔排序、堆排序、归并排序、快速排序、等等。 5.排序经常用到的数据结构: #define MAXSIZE 10...原创 2018-07-20 09:51:45 · 214 阅读 · 0 评论 -
排序(4)--直接插入排序和希尔排序
一、直接插入排序 每趟都会判断一下要处理的记录与前面已经排好的记录之间的大小关系,若需要排序,则更改下标(数组下标),将已处理的记录后(前)移;下标移动完成后,然后再将记录插入到正确的(空出的)位置。 void insert_sort(SqList *L) { int i,j; for(i=2;i <= L->length;i++){ if(L-&...原创 2018-07-25 19:41:26 · 125 阅读 · 0 评论 -
查找(5)--散列查找
1.基本概念 散列又称哈希(hash),散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置addr=f(key)。散列技术既是一种存储方法又是一种查找方法:存储时通过散列函数(哈希函数)计算出记录的散列地址,并将记录存入此地址;查找时,同样通过散列函数计算出记录的散列地址,然后按此地址访问该记录。 上述方法在理想情况下的效率非常高,但是实际...原创 2018-07-19 17:08:52 · 347 阅读 · 0 评论 -
查找(4)--动态查找与B树
前面所述的二叉排序树和平衡二叉树对于动态查找表是不错的解决方法,但是它们都需要在内存中来处理,当数据量很大时这是不可行的,这种情况下可使用B树来解决。 B树是一种平衡的多路查找树,在有限内存的情况下非常适合。它的数据组织结构类似于一级级的链表(不恰当的类比),只不过数据之间的指针不是指向本链表的下一个节点,而是指向下一级链表(例如硬盘的下一页)。在一个典型的B树应用中,要处理的硬盘中的数据量巨大...原创 2018-07-19 16:21:37 · 279 阅读 · 0 评论 -
查找(3)--动态查找表与二叉搜索树
一、二叉排序树 前面说过在查找时需要进行插入和删除操作的的查找表--动态查找表,对于动态查找表数据结构的组织我们使用二叉排序树。 二叉排序树又称二叉查找树,当其非空时具有以下性质: 若左子树非空则左子树上所有节点的值均小于它的根节点的值; 若右子树非空则右子树上所有节点的值均大于它的根节点的值; 它的左右子树也分别为二叉排序树。 构造二叉排序树不是为了排序,而是为了方便查找和插入删除操作...原创 2018-07-18 22:38:46 · 216 阅读 · 0 评论 -
排序(8)--快速排序优化
对快速排序的优化可以从以下4点着手: 枢轴选取优化; 优化不必要的交换; 对小数组排序的优化方案; 优化递归操作。 1、快速排序的性能在很大程度上取决于枢轴的选取,若枢轴值正好处于序列的中间,那就可以将序列分为差不多相等的小数值集合和大数值集合;最坏情况下是枢轴选择了最大值或最小值。因此选取固定位置的值作为枢轴的方法是不合理的。改进的方法很多,有随机选取法、三数取中法、九数取中法等等...原创 2018-08-10 21:27:55 · 202 阅读 · 0 评论