西安交大数据结构与算法分析课内实验报告.docxVIP

西安交大数据结构与算法分析课内实验报告.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

数据结构与算法分析课内实验报告

实验日期:

姓名:司默涵

学号和班级:2110505018计算机11

指导老师:赵仲孟

实验目的

实现查找和排序两项《数据结构与算法分析》中的重要应用。

培养严谨、踏实的学习、实验态度。

进一步锻炼编程能力,加深对课程内容的理解。

题目〔加粗为所选题目〕

查找方法的实现〔二者选一〕

〔1〕编程实现完整的折半查找算法程序,并举例演示运行过程。

〔2〕编程实现一种Hash查找表算法程序〔选择确定一种Hash函数和冲突解决方法〕,并举例演示运行过程。

排序方法与实现

在Shell排序、快速排序、归并排序、堆排序等排序算法中选择一种算法,编程实现相应算法实现过程,并举例演示算法各趟运行结果。

三、算法设计

折半查找算法

BinarySearch(max,min,des)

mid-(max+min)/2

while(min=max)

mid=(min+max)/2

ifmid=desthen

returnmid

elseifmiddesthen

max=mid-1

else

min=mid+1

returnmax

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(logn)完成搜索任务。它的根本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比拟,如果x=a[n/2]那么找到x,算法终止。如果xa[n/2],那么我们只要在数组a的左半部继续搜索x〔这里假设数组元素呈升序排列〕。如果xa[n/2],那么我们只要在数组a的右半部继续搜索x。

二分查找法一般都存在一个临界值的BUG,即查找不到最后一个或第一个值。可以在比拟到最后两个数时,再次判断到底是哪个值和查找的值相等

快速排序算法

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据〔通常选用第一个数据〕作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

一趟快速排序的算法是:

①设置两个变量i、j,排序开始的时候:i=0,j=N-1;

②以第一个数组元素作为关键数据,赋值给key,即?key=A[0];

③从j开始向前搜索,即由后开始向前搜索〔j=j-1即j--〕,找到第一个小于key的值A[j],A[i]与A[j]交换;

④从i开始向后搜索,即由前开始向后搜索〔i=i+1即i++〕,找到第一个大于key的A[i],A[i]与A[j]交换;

⑤重复第3、4、5步,直到I=J;(3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。找到并交换的时候i,j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后令循环结束。〕

四、源程序

〔1〕折半查找算法程序

#includestdio.h

#includestdlib.h

#includetime.h

//函数结果状态代码

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

#defineN10000

//定义函数类型status,返回值为状态代码

typedefintstatus;

intf=0;

voidmodInsertSort(int*data,intn,intdelta)

{

inti,j,temp;

for(i=delta;in;i+=delta)

for(j=i;j=delta;j-=delta)

{

if(data[j]data[j-delta])

temp=data[j],data[j]=data[j-delta],data[j-delta]=temp;

else

break;

}

}

voidshellsort(intdata[],intlen)

{

inti,delta;

for(delta=len/2;delta0;delta/=2)

for(i=0;idelta;i++)

文档评论(0)

liuzhouzhong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档