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

数据结构第三次实验+第二题链表排序.doc

数据结构第三次实验+第二题链表排序.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验报告 实验名称: 实验三——排序 学生姓名: XXX 班 级: xxxxxxxxxxx 班内序号: 学 号: 日 期: 2018年6月3日 实验要求 实验目的:通过选择下面两个题目之一,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。 实验内容:使用链表实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、冒泡排序 3、快速排序 4、简单选择排序 5、其他 要求: 1、测试数据分成三类:正序、逆序、随机数据 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作) 4、对2和3的结果进行分析,验证上述各种算法的时间复杂度 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 单链表,储存每个元素值同时,储存该元素的直接后继元素位置信息。即数据域(data),指针域(next)。 struct Node { int data; struct Node *next; }; 2.2 关键算法分析 链表的建立: Linklist::Linklist (int a[],int n) { front = new Node; Node *r = front ; for(int i=0;in;i++) //尾插法初始化链表 { Node *s = new Node; s-data = a[i]; r-next = s; r=s; } r-next = NULL; } 尾插法创建链表:①堆中建立新节点②将a[i]写入新节点data域③新节点加入链表r-next=s.④修改尾指针r=s. 简单选择排序: void Linklist ::Link_Selectsort (int n) { Node *p=front-next ; int a=0,b=0; //a记载比较次数,b记载移动次数 while(p!=NULL) { Node *s =p; //s指向最小节点 Node *q=p-next ; while(q!=NULL) { if(q-datas-data) s=q; a++; q=q-next ; } if(p!=s) { int t=p-data ;p-data =s-data ;s-data =t; //交换节点值 b=b+3; } p=p-next ; } Print(n,a,b); } 建立p节点记载有序区最后节点的下一个节点,s节点则记载无序区的最小节点,q节点用于遍历链表无序区,找出最小值。每次循环中q都找到无序最小节点,用s指向该节点,后p和s节点值交换。 时间复杂度为O(n^2) 直接插入排序: void Linklist ::Link_Insertsort(int n) { Node *p=front; Node *q=front-next ; //q为无序区第一个节点的前驱 int a=0,b=0; //a记录比较次数,b记录移动次数 while(p-next !=NULL) { p=front; //初始化p为有序区的第一个前驱 while(q-next !=NULLp!=q) { a++; if(p-next -dataq-next -data ) //比较,交换节点顺序 { Node *s=q-next ; q-next =s-next ; //摘除s节点 s-next =p-next ; //插到p节点之后 p-next =s; b=b+3; break; } p=p-next ; } if(p==q) q=q-next ; //若本躺排序无节点交换,则q点下移 p=q; //当q到链尾时,用于结束循环 } Print(n,a,b); } 指针p指向有序区的待比较节点前驱(初始化时即front节点)②指针q指向无序区第一个元素的前驱Ⅰ:若无序区的第一个节点值较大,则p下移

文档评论(0)

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

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

1亿VIP精品文档

相关文档