练习:

2.3-2:去掉合并排序中的哨兵值

#include <iostream>
using namespace std;
void Merge(int* A, int p, int q, int r){int n1 = q-p+1;int n2 = r-q;int *L = new int[n1+1];int *R = new int[n2+1];for(int i=0; i<=n1-1; i++)L[i] = A[p+i-1];for(int j=0; j<=n2-1; j++)R[j] = A[q+j];int i = 0;int j = 0;int k;for(k=p-1; k<=r-1 && i!=n1 && j!=n2; k++){//去掉哨兵后则要增加终止判断if(L[i]<=R[j]){A[k] = L[i];i++;}else{A[k] = R[j];j++;}}//*********去掉哨兵后,加入这部分即可*********//if(i == n1 || j == n2){while(k<=r-1){if(i == n1)A[k] = R[j++];elseA[k] = L[i++];k++;}} delete[] L;delete[] R;//*****************************************//
}
void MergeSort(int* A, int p,int r){if(p<r){int q = (p+r)/2;MergeSort(A, p, q);MergeSort(A, q+1, r);Merge(A, p, q, r);}
}
int main(){int A[]={10,9,4,7,8,3,1,15,12};int length_A = 9;;MergeSort(A, 1, length_A);for(int i=0; i<length_A; i++)cout<<A[i]<<" ";return 0;
}

2.3-4:插入排序的递归版

#include <iostream>
using namespace std;
void InsertionSort(int *A, int length_A){int last = length_A-1;if(last > 0){InsertionSort(A, length_A-1);int key = A[last];int i;for(i=last-1; i>=0 && A[i]>key; i--)A[i+1] = A[i];A[i+1] = key;       }
}
int main(){int A[]={10,9,4,7,8,3,1};int length_A = 7;InsertionSort(A, length_A);for(int i=0; i<length_A; i++)cout<<A[i]<<" ";return 0;
}

思考题:

2-2.证明冒泡排序的正确性:

b) 2-4行的循环不变式为:A[j] = min{A[i] | i = j to n}

证明:初始时,j=length[A],此时A[j]为末尾元素,它后面没有值了,满足。

假设k次迭迭代前,j = k,满足循环不变式,则下次(k-1)迭代前,j  = k -1,在之前执行了把A[k]和A[k-1]中的小数放到前面的操作,故这时A[k-1]仍比后面的元素都小,满足;

终止条件是,当j = i时,这时A[i]就是A[i]到A[n]中最小的值。

c) 利用b)的终止条件,1-4行的循环不变式为:A[1]<=A[2]<=..<=A[i]

证明:初始时,A[i] = A[1],单个元素有序;

假设k次迭代前,i = k,满足A[1]到A[k]有序,第k+1次迭代前,利用b)的终止条件A[k]<=A[k+1],得,满足;

终止条件是,当i = length[A]时,全部有序。

d) 最坏运行时间:求和[((n^2)-n)/2];比插入算法效率高一些,但增长率相同。

附上冒泡排序程序:

#include <iostream>
using namespace std;
void BubbleSort(int *A, int length_A){int last = length_A-1;for(int i=0; i<=last; i++){for(int j=last; j>=i+1; j--){if(A[j-1]>A[j]){int temp = A[j];A[j] = A[j-1];A[j-1] = temp;}}}
}
int main(){int A[]={10,9,4,7,8,3,1};int length_A = 7;BubbleSort(A, length_A);for(int i=0; i<length_A; i++)cout<<A[i]<<" ";return 0;
}

算法导论第二章部分习题自我解答相关推荐

  1. 统计机器学习导论第二章答案

    R语言学习笔记 统计机器学习导论第二章部分习题 文章目录 R语言学习笔记 一.8题 8. This exercise relates to the College data set, which ca ...

  2. 算法图解第二章笔记与习题(选择排序)

    算法图解第二章笔记与习题(选择排序) 文章目录 算法图解第二章笔记与习题(选择排序) 2.2 数组和链表 2.2.1 链表 2.2.2 数组 2.2.3 数组和链表的读取.插入和删除操作的时间复杂度 ...

  3. 计算机导论重写算法,计算机导论第二章.ppt

    <计算机导论第二章.ppt>由会员分享,可在线阅读,更多相关<计算机导论第二章.ppt(66页珍藏版)>请在人人文库网上搜索. 1.1.第二章计算机系统的组成2.1四个功能部件 ...

  4. 计算机科学导论第二章,计算机科学导论第二章.doc

    计算机科学导论第二章.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 3.9 积分  第二次作业 2.1 数值数据1. 计算机只识别二进制编 ...

  5. R语言基础题及答案(二)——R语言与统计分析第二章课后习题(汤银才)

    R语言与统计分析第二章课后习题(汤银才) 题-1 用函数rep( )构造一个向量x, 它由3个3, 4个2, 5个1构成. x<-rep(c(3,2,1),times=c(3,4,5));pri ...

  6. 寒江独钓 第二章 课后习题

    第二章 课后习题 (1)内核编程环境和用户应用程序编程环境有哪些不同? 编程模式可分为两种:用户模式和内核模式. 其中用户应用程序的编程采用的是用户模式,这里都是在操作系统的隔离环境中完成的,也就是说 ...

  7. 比特数据结构与算法(第二章收尾)带头双向循环链表的实现

    1.链表的分类 链表的分类 ① 单向或者双向 ② 带头或者不带头 ③ 循环或者非循环 常用的链表: 根据上面的分类我们可以细分出8种不同类型的链表,这么多链表我们一个个讲解这并没有意义.我们实际中最常 ...

  8. 【趣学算法】第二章 算法之美(下)

    14天阅读挑战赛 [趣学算法]第二章 算法之美(下) 1. 一棋盘的麦子 1.1 题目描述 1.2 题目解析 1.3 爆炸增量函数 称上面的函数(1.2中的第一个函数)为爆炸增量函数. 爆炸函数也就是 ...

  9. 《计算机网络技术》第二章课后习题答案(全)

    <计算机网络技术>第二章课后习题答案(全) 1.消息和信息的各自概念是什么?两者之间有何关系? 答: 消息:人类能感知的描述. 信息:消息中所包含的有意义的内容. 关系:消息是信息的载体. ...

最新文章

  1. 网站SEO优化中导航对用户体验的重要性
  2. 比较两个时间字符串的大小
  3. linux内核全局变量重定位,关于可重定位文件中全局变量的一个重定位疑惑,借各位牛刀一用^...
  4. 比特币、莱特币来一发?
  5. 机器学习之基于A*搜索解决八数码问题15数码问题
  6. 中专选计算机应用很难,对中专计算机应用基础改革的思考.pdf
  7. 图片优化_网站里的图片应该如何优化
  8. 中国到底需要多少博士点?
  9. 95后女孩成最年轻“航天人”,团队里女孩占一半,老一辈退休年轻人挑大梁啦...
  10. 磁力计 姿态 matlab,磁力计如何用来计算姿态(1)
  11. 2018.10.24-day3 python总结
  12. Postman局部变量设置
  13. vue实现钉钉扫码登录
  14. oracle补丁冲突解决方法,【学习笔记】Oracle RAC升级安装patch补丁的问题和解决办法...
  15. LimeSDR-USB硬件部分详细解读
  16. vmware服务器虚拟化培训视频教程,目前网上关于vSphere最详细的视频教程 vSphere全套经典培训视频教程 VMware课程超清...
  17. 最简单直接粗暴的Mothur分析OTU教程
  18. win10右键闪退到桌面_win10打开控制面板总闪退弹回桌面怎么办
  19. 单点登录SSO(single sign on)模式(单点登录+权限认证)
  20. 【Android -- 面试】精心整理 Android 面试题(2022求职必看)

热门文章

  1. nas 微型计算机,NETGEAR无线路由器和NAS试用
  2. 高博十四讲中第六章非线性优化 由于g2o更新出现的问题解决
  3. 证券基础--股票发行上市
  4. Vue限制文本框显示字数,多余用...代替
  5. pytorch PythonAPI torch.....................
  6. 逻辑运算是计算机实现计算器基础,第1章__计算机的发展与运算基础.ppt
  7. windows onlyoffice教程
  8. 0460-HDFS纠删码的机架感知
  9. 基于SSH的校园二手物品交易系统
  10. 破解中国电信天翼宽带猫 贝尔e8-C光猫RG200O-CA_V1.1SP002超级密码获取、开启自动拨号和无线路由功能