数据结构后习题答案第八章.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  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文档。上传文档
查看更多
数据结构后习题答案第八章

第八章 排序(参考答案) 本章所用数据结构 #define N 待排序记录的个数 typedef struct { int key; ElemType other; }rectype; rectype r[n+1]; // r为结构体数组 8.2 稳定排序有:直接插入排序、起泡排序、归并排序、基数排序 不稳定排序有:希尔排序、直接选择排序、堆排序 希尔排序例:49,38, 49,90,70,25 直接选择排序例:2, 2,1 堆排序例:1,2,2 8.3 void StlinkedInsertSort(s , n); // 对静态链表s[1..n]进行表插入排序, 并调整结果,使表物理上排序 { #define MAXINT 机器最大整数 typedef struct { int key; int next; }rec; rec s[n+1]; // s为结构体数组 s[0].key=maxint; s[1].next=0; //头结点和第一个记录组成循环链表 i=2; //从第2个元素开始,依次插入有序链表中 while (i=n) {q=0; p=s[0].next; // p指向当前最小元素,q是p的前驱 while (p!=0 s[p].keys[i].key) // 查找插入位置 { q=p; p=s[p].next; } s[i].next=p; s[q].next=i; // 将第个元素链入 i++; } // while(i=n) 静态链表的插入 // 以下是重排静态链表,使之物理有序 i=1; p=s[0].next; while (i=n) {WHILE (pi) p=s[p].next; q=s[p].next; if (i!=p) { s[i]((s[p]; s[i].next=p; p=q; i++; } } }//算法结束 8.4 void TwoWayBubbleSort( rectype r[n+1]; int n) // 对r[1..n]进行双向冒泡排序。即相邻两遍向两个相反方向起泡 { int i=1, exchange=1; // 设标记 while (exchange) { exchange=0; // 假定本趟无交换 for (j=n-i+1 j=i+1;j--) // 向前起泡,一趟有一最小冒出 if (r[j]r[j-1]) {r[j](r[j-1]; exchange=1;} // 有交换 for (j= i+1;j=n-I;j++) // 向后起泡,一趟有一最大沉底 if (r[j]r[j+1]) {r[j](r[j+1]; exchange=1;} // 有交换 i++; } // end of WHILE exchange }//算法结束 8.5 (1)在n=7时,最好情况下进行10次比较。6次比较完成第一趟快速排序,将序列分成 相等程度的序列(各3个元素),再各进行2次比较,完成全部排序。 (2)最好的初始排列:4,1,3,2,6,5,7 8.6 void QuickSort(rectype r[n+1]; int n) // 对r[1..n]进行快速排序的非递归算法 { typedef struct { int low,high; }node node s[n+1]; int top; int quickpass(rectype r[],int,int); // 函数声明 top=1; s[top].low=1; s[top].high=n; while (top0) {ss=s[top].low; tt=s[top].high; top--; if (sstt) { k=quickpass(r,ss,tt); if (k-ss1) {top++; s[top].low=ss; s[top].high=k-1;} if (tt-k1) {top++; s[top].low=k+1; s[top].high=tt;} } } // 算法结束 int quickpass(rectype r[];int s,t) {i=s; j=t; rp=r[i]; x=r[i].key; while (ij) {while (ij x=r[j].key) j--; if (ij) r[i++]=r[j]; while (ij x=r[j].key) i++;

您可能关注的文档

文档评论(0)

技术支持工程师 + 关注
实名认证
文档贡献者

仪器公司技术支持工程师

1亿VIP精品文档

相关文档