算法导论第二章部分习题自我解答
练习:
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;
}
算法导论第二章部分习题自我解答相关推荐
- 统计机器学习导论第二章答案
R语言学习笔记 统计机器学习导论第二章部分习题 文章目录 R语言学习笔记 一.8题 8. This exercise relates to the College data set, which ca ...
- 算法图解第二章笔记与习题(选择排序)
算法图解第二章笔记与习题(选择排序) 文章目录 算法图解第二章笔记与习题(选择排序) 2.2 数组和链表 2.2.1 链表 2.2.2 数组 2.2.3 数组和链表的读取.插入和删除操作的时间复杂度 ...
- 计算机导论重写算法,计算机导论第二章.ppt
<计算机导论第二章.ppt>由会员分享,可在线阅读,更多相关<计算机导论第二章.ppt(66页珍藏版)>请在人人文库网上搜索. 1.1.第二章计算机系统的组成2.1四个功能部件 ...
- 计算机科学导论第二章,计算机科学导论第二章.doc
计算机科学导论第二章.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 3.9 积分 第二次作业 2.1 数值数据1. 计算机只识别二进制编 ...
- R语言基础题及答案(二)——R语言与统计分析第二章课后习题(汤银才)
R语言与统计分析第二章课后习题(汤银才) 题-1 用函数rep( )构造一个向量x, 它由3个3, 4个2, 5个1构成. x<-rep(c(3,2,1),times=c(3,4,5));pri ...
- 寒江独钓 第二章 课后习题
第二章 课后习题 (1)内核编程环境和用户应用程序编程环境有哪些不同? 编程模式可分为两种:用户模式和内核模式. 其中用户应用程序的编程采用的是用户模式,这里都是在操作系统的隔离环境中完成的,也就是说 ...
- 比特数据结构与算法(第二章收尾)带头双向循环链表的实现
1.链表的分类 链表的分类 ① 单向或者双向 ② 带头或者不带头 ③ 循环或者非循环 常用的链表: 根据上面的分类我们可以细分出8种不同类型的链表,这么多链表我们一个个讲解这并没有意义.我们实际中最常 ...
- 【趣学算法】第二章 算法之美(下)
14天阅读挑战赛 [趣学算法]第二章 算法之美(下) 1. 一棋盘的麦子 1.1 题目描述 1.2 题目解析 1.3 爆炸增量函数 称上面的函数(1.2中的第一个函数)为爆炸增量函数. 爆炸函数也就是 ...
- 《计算机网络技术》第二章课后习题答案(全)
<计算机网络技术>第二章课后习题答案(全) 1.消息和信息的各自概念是什么?两者之间有何关系? 答: 消息:人类能感知的描述. 信息:消息中所包含的有意义的内容. 关系:消息是信息的载体. ...
最新文章
- 网站SEO优化中导航对用户体验的重要性
- 比较两个时间字符串的大小
- linux内核全局变量重定位,关于可重定位文件中全局变量的一个重定位疑惑,借各位牛刀一用^...
- 比特币、莱特币来一发?
- 机器学习之基于A*搜索解决八数码问题15数码问题
- 中专选计算机应用很难,对中专计算机应用基础改革的思考.pdf
- 图片优化_网站里的图片应该如何优化
- 中国到底需要多少博士点?
- 95后女孩成最年轻“航天人”,团队里女孩占一半,老一辈退休年轻人挑大梁啦...
- 磁力计 姿态 matlab,磁力计如何用来计算姿态(1)
- 2018.10.24-day3 python总结
- Postman局部变量设置
- vue实现钉钉扫码登录
- oracle补丁冲突解决方法,【学习笔记】Oracle RAC升级安装patch补丁的问题和解决办法...
- LimeSDR-USB硬件部分详细解读
- vmware服务器虚拟化培训视频教程,目前网上关于vSphere最详细的视频教程 vSphere全套经典培训视频教程 VMware课程超清...
- 最简单直接粗暴的Mothur分析OTU教程
- win10右键闪退到桌面_win10打开控制面板总闪退弹回桌面怎么办
- 单点登录SSO(single sign on)模式(单点登录+权限认证)
- 【Android -- 面试】精心整理 Android 面试题(2022求职必看)
热门文章
- nas 微型计算机,NETGEAR无线路由器和NAS试用
- 高博十四讲中第六章非线性优化 由于g2o更新出现的问题解决
- 证券基础--股票发行上市
- Vue限制文本框显示字数,多余用...代替
- pytorch PythonAPI torch.....................
- 逻辑运算是计算机实现计算器基础,第1章__计算机的发展与运算基础.ppt
- windows onlyoffice教程
- 0460-HDFS纠删码的机架感知
- 基于SSH的校园二手物品交易系统
- 破解中国电信天翼宽带猫 贝尔e8-C光猫RG200O-CA_V1.1SP002超级密码获取、开启自动拨号和无线路由功能