常用算法和数据结构

常用算法和数据结构

ID:37424355

大小:1.39 MB

页数:102页

时间:2019-05-23

常用算法和数据结构_第1页
常用算法和数据结构_第2页
常用算法和数据结构_第3页
常用算法和数据结构_第4页
常用算法和数据结构_第5页
资源描述:

《常用算法和数据结构》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第1章常用算法和数据结构第1章常用算法和数据结构大纲要求:l排序算法。l查找算法。l数据结构(线性表、栈、队列、数组、树、图)。1.1排序算法1.1.1考点辅导1.1.1.1选择排序若设R[1...n]为待排序的n个记录,R[1...i-1]已按照主关键字由小到大排序,且任意x∈R[1...i-1],y∈R[i...n]满足x.key≤y.key,则选择排序的主要思路如下。(1)反复从R[i...n]中选出关键字最小的结点R[k]。(2)若i≠k,则将R[i]与R[k]交换,使得R[1...i]有序且

2、保持原来的性质。(3)i增1,直到i为n。为方便描述,被查找的顺序表C类型定义如下:#defineMAXSIZE1000/*顺序表的长度*/typedefintKeyType;/*关键字类型为整数类型*/typedefstruct{KeyTypekey;/*关键字项*/InfoTypeotherinfo;/*其他数据项*/}RecType;/*记录类型*/typedefstruct{RecTyper[MAXSIZE+1];/*r[0]空作为哨兵*/intlength;/*顺序表长度*/}SqList;

3、/*顺序表类型*/顺序存储线性表的选择排序算法如下:voidSqsort(SqList&q){inti,j,k,temp;for(i=0;i

4、为n*(n-1)/2;同时,由于相等的两个元素,位置相对在前的可能被交换到后面,故该选择排序是不稳定的。1.1.1.2直接插入排序若设R[1...n]为待排序的n个记录,R[1...i-1]已按照主关键字由小到大排序,则直接插入排序的主要思路如下。(1)寻找R[i]在R[1…i-1]中的插入位置,确保R[i]插入后保持有序。(2)i增1,若i小于等于n,则转到(1)执行,否则结束。顺序线性存储结构下的直接插入排序算法如下:voidDinsert(SqList&q){inti,j,k;for(i=1;i

5、=0&&t.key

6、线性表采用直接插入排序,最少比较次数为n-1,最多比较次数为n*(n-1)/2。(2)直接插入排序是在有序表的基础上进行的,所以排序效率较高,且比较稳定。1.1.1.3希尔排序希尔排序(ShellSort)的基本思路为:把直接插入方法分成插入步长由大到小不同的若干趟来进行,一开始步长较大,相当于把序列分成几个子表。对每个子表来说,因为其结点少,直接插入排序的效率会很高。以后各趟逐步减小步长,子表的结点也越来越多,但是子表中的结点已经进行过前一趟的大步长的直接插入排序,有相当多的结点已基本有序。这使得后

7、一趟的插入排序能充分利用前一趟的排序结果。当步长降到1时,只要对基本有序的线性表进行一趟直接插入排序即可。101第1章常用算法和数据结构初次取线性表的一半长度为步长,以后每次减半,直到步长为1,希尔排序的算法如下:voidShsort(SqList&q){intj,k,h,y;/*h为步长*/for(h=q.length/2;h>0;h/=2)for(j=h;j=0&&y.key

8、)q.r[k+h]=q.r[k];/*找到插入的位置并移动*/q.[k+h]=y;}}1.1.1.4冒泡排序若设R[1...n]为待排序的n个记录,且假设为从上至下纵向排列,则要求将n个给定记录由小到大排序的冒泡排序(BubbleSort)的基本思路如下。(1)对当前还未排好序的、指定范围内的全部结点,自上而下对相邻的两个结点依次进行比较和调整,让关键字较大的结点往下沉,关键字较小的结点往上冒。即若R[j].key>R[j+1].keg,则将R[j].k

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。