网站大量收购独家精品文档,联系QQ:2885784924

1404011013_14计科一班_高婷婷_实验四_顺序表的排序实验教程.docx

1404011013_14计科一班_高婷婷_实验四_顺序表的排序实验教程.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1404011013_14计科一班_高婷婷_实验四_顺序表的排序实验教程

。 计算机科学与技术系 实 验 报 告 专业名称计算机科学与技术 课程名称数据结构与算法 项目名称顺序表的排序实验 班 级14计科一班 学 号1404011013 姓 名高婷婷 同组人员 实验日期2016.3.29 一、实验目的与要求: (简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。) 实验目的:掌握以顺序表组织排序数据元素的排序方法,重点是希尔排序、快速排序、归并排序。 涉及到相关知识点:顺序表的建立、冒泡排序的改进、直接插入排序以及快速排序算法的应用。 实验的具体要求: --改进冒泡排序,对一个待排序的数据元素集合进行奇偶转换排序。 --在熟悉直接插入排序的基础上,结合折半插入排序算法的描述,写出折半插入排序算法的实现过程(函数),并通过运行验证。 --设计算法将一个整形数组调整为这样的数组:所有3的倍数在最左边,所有除以3余1的数在中间,而所有除以3余2的数在最左边。要求算法时间尽可能少。 二、实验内容 (根据本次实验项目的具体任务和要求,完成相关内容,可包括:实验目的、算法原理、实验仪器、设备选型及连线图、算法描述或流程图、源代码、实验运行步骤、关键技术分析、测试数据与实验结果、其他 ) 1、问题分析 --(1)奇偶转换排序: 题目需要建立一种新的排序方式,选取所有奇数列的元素与其右侧相邻的元素进行比较,将较小的元素排在最前面, 选取所有偶数列的元素与其右侧相邻的元素进行比较,将较小的元素排在最前面,重复前面两步直到所有序列有序。 折半插入排序 插入排序采用顺序数据结构,插入元素伴随移动数据,但一般思路是从前向后一次与插入元素进行比较,时间复杂度O(n),效率较低,由于数组r[0...i-1]本身是有序的,可以借鉴折半查找的思想寻找插入位置,此时时间复杂度为O(lgn).当数据量足够大时,这两种排序算法所用的时间相差很大,获得每个元素的插入位置后,仅需一次向后移动位置即可。 快速排序 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据序列有序。 2、概要设计 (1)改进冒泡排序,对一个待排序的数据元素集合进行奇偶转换排序。 详细思路: --建立顺序表RecordList *SqLset() RecordList *SqLset(){ RecordList *L; int i=0,a; L=malloc(sizeof(RecordList)); printf(输入一个整型序列,输入0时结束!); scanf(%d,a); //输入一个整数 L-length=0; while(a!=0){ L-r[i]=a; L-length++,i++; if(L-length==LIST_SIZE-1) break; scanf(%d,a); } return(L); } --设计排序函数void Bub(RecordList *L),第一趟对所有奇数i,将r[i]与r[i+1]进行比较,第二趟对所有的偶数i,将r[i]与r[i+1]进行比较,每次比较时若r[i]r[i+1],则将二者交换,重复上述过程至整个数据表有序。 --主函数main()调用上述两个函数,得到运行结果 (2)在熟悉直接插入排序的基础上,结合折半插入排序算法的描述,写出折半插入排序算法的实现过程(函数),并通过运行验证。 --建立顺序表 --写一个折半插入排序法的函数 void BinSort(RecordList *L),在函数中写一个循环,在循环中应用折半插入排序,数组中变换二次区间方法实现折半插入法 算法构思: a.low=1;high=i-1//有序表长度i-1,第i个元素为待插元素; b.若lowhigh,得到插入位置,转e; c.若low=high,mid=(low+high)/2;//取表的中点,将表一分为二,确定待插入区间; d.若r[0]r[mid],则high=mid-1;//插入位置在左子表中 否则,low=mid+1;//插入位置在右子表中 e.high+1即为待插入位置,从i-1到high+1的元素逐个后移,然后将r[0]放在r[high+1]位置,完成一趟插入排序 --对编好的程序进行测试,得出测试结果 (3)设计算法将一个整形数组调整为这样的数组:所有3的倍数在最左边,所有除以3余1的数在中间,而所有除以3余2的数在最左边。要求算法时间尽可能少。 --建立一个表长为length的顺序表 --根据题意使用快速排序法对其排序,设置函数void Partion(RecordList *L),

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档