付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
塔里木大学信息工程学院塔里木大学算法程序与分析课程实验报告课程名称:算法程序与分析任课教师:李旭机房:逸夫楼408计算机编号:33实验日期:2015-3-17实验成绩:实验班级:计算机17-5班学生姓名:王琴辉实验名称:分治算法实验设备、设施:MicrosoftVisualC++6.0实验要求:1.首先要理解分治算法思想;2.其次针对问题要认真分析,并进一步掌握分治算法的思想;3.最后进行实际操作,即对给定的问题设计出相应的算法。实验目的:1.理解递归算法的思想和递归程序的执行过程,并能熟练编写递归程序。2.掌握分治算法的思想,对给定的问题能设计出分治算法予以解决。实验内容:快速排序堆排序,对其进行插入、删除操作。算法设计思路:1.快速排序的设计思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2.堆排序的设计思想:根结点的值最小(最大),且根结点的子树也为一个堆,称为最小堆(最大堆)算法程序:快速排序代码:#include<stdio.h>intpartions(intl[],intlow,inthigh){intprvotkey=l[low];l[0]=l[low];while(low<high){while(low<high&&l[high]>=prvotkey)--high;l[low]=l[high];while(low<high&&l[low]<=prvotkey)++low;l[high]=l[low];}l[low]=l[0];returnlow;}voidqsort(intl[],intlow,inthigh){intprvotloc;if(low<high){prvotloc=partions(l,low,high);//将第一次排序的结果作为枢轴qsort(l,low,prvotloc-1);//递归调用排序由low到prvotloc-1qsort(l,prvotloc+1,high);//递归调用排序由prvotloc+1到high}}voidquicksort(intl[],intn){qsort(l,1,n);//第一个作为枢轴,从第一个排到第n个}voidmain(){inta[11]={0,2,32,43,23,45,36,57,14,27,39};for(intb=1;b<11;b++)printf("%3d",a[b]);printf("\n");quicksort(a,11);for(intc=1;c<11;c++)printf("%3d",a[c]);}二叉堆的实现:#include<stdio.h>#include<stdlib.h>#defineLENGTH(a)((sizeof(a))/(sizeof(a[0])))staticintm_heap[30];//数据staticintm_capacity=30;//总的容量staticintm_size=0;//实际容量(初始化为0)intget_index(intdata){inti=0;for(i=0;i<m_size;i++)if(data==m_heap[i])returni;return-1;}staticvoidmaxheap_filterdown(intstart,intend){intc=start;//当前(current)节点的位置intl=2*c+1;//左(left)孩子的位置inttmp=m_heap[c];//当前(current)节点的大小while(l<=end){//"l"是左孩子,"l+1"是右孩子if(l<end&&m_heap[l]<m_heap[l+1])l++;//左右两孩子中选择较大者,即m_heap[l+1]if(tmp>=m_heap[l])break;//调整结束else{m_heap[c]=m_heap[l];c=l;l=2*l+1;}}m_heap[c]=tmp;}intmaxheap_remove(intdata){intindex;//如果"堆"已空,则返回-1if(m_size==0)return-1;//获取data在数组中的索引index=get_index(data);if(index==-1)return-1;m_heap[index]=m_heap[--m_size];//用最后元素填补maxheap_filterdown(index,m_size-1);//从index位置开始自上向下调整为最大堆return0;}staticvoidmaxheap_filterup(intstart){intc=start;//当前节点(current)的位置intp=(c-1)/2;//父(parent)结点的位置inttmp=m_heap[c];//当前节点(current)的大小while(c>0){if(m_heap[p]>=tmp)break;else{m_heap[c]=m_heap[p];c=p;p=(p-1)/2;}}m_heap[c]=tmp;}intmaxheap_insert(intdata){if(m_size==m_capacity)return-1;m_heap[m_size]=data;//将"数组"插在表尾maxheap_filterup(m_size);//向上调整堆m_size++;//堆的实际容量+1return0;}voidmaxheap_print(){inti;for(i=0;i<m_size;i++)printf("%d",m_heap[i]);}voidmain(){inta[]={10,40,30,60,90,70,20,50,80};inti,len=LENGTH(a);printf("==依次添加:");for(i=0;i<len;i++){printf("%d",a[i]);maxheap_insert(a[i]);}printf("\n==最大堆:");maxheap_print();i=85;maxheap_insert(i);printf("\n==添加元素:%d",i);printf("\n==最大堆:");maxheap_print();i=90;maxheap_remove(i);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某著名企业金典系列路演活动策划案
- 《GBT 22325-2008小麦粉中过氧化苯甲酰的测定 高效液相色谱法》专题研究报告
- 《GBT 14454.11-2008香料 含酚量的测定》专题研究报告
- 道路养护安全培训计划课件
- 道路交通安全培训效果课件
- 2026年江苏高考生物试题及答案
- 2022头皮美塑疗法技术操作规范专家共识
- 内蒙古农作物生产技术(北方本)综合测试题(四)及答案
- 车队安全培训内容
- 2025工程技术年终总结(2篇)
- 2026年辽宁金融职业学院单招职业技能测试题库附答案解析
- 2026北京海淀初三上学期期末语文试卷和答案
- 2024-2025学年北京市东城区五年级(上)期末语文试题(含答案)
- 2026年宁夏贺兰工业园区管委会工作人员社会化公开招聘备考题库带答案详解
- NB-T32036-2017光伏发电工程达标投产验收规程
- 两轮车控制器行业报告
- JSA临时用电作业安全分析表
- 2015-2022年北京卫生职业学院高职单招语文/数学/英语笔试参考题库含答案解析
- 赛肤润常见临床应用2010年
- 提高铝模板施工质量合格率
- 传感器与检测技术习题集
评论
0/150
提交评论