算法设计与分析(第2版)-王红梅-胡明-习题答案.
习题1 家欧拉(Leonhard Euler,1707—1783)提出并 力口里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一 次,图是这条河以及河上的两个岛和七座桥的草图。请将该问题的数据模型抽象出 来,并判断此问题是否有解。
七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点 1,一次步行 2,经过七座桥,且每次只经历过一次 3,回到起点 该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个 奇点的图形。
2 •在欧几里德提出的欧几里德算法中(即 最初的欧几里德算法)用的不是除法而是减 法。请用伪代码描述这个版本的欧几里德算法
=m-n 2.循环直到r=0 m=n n=r r=m-n 3 输出 m
1. 图论诞生于七桥问题。出生于瑞士的伟大数学 解决了该问题。七桥问题是这样描述的:一个 人是否能在一次步行中穿越哥尼斯堡(现在叫 图七桥问题区 3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代 码和C++描述。
编写程序,求 n 至少为多大时, n 个“ 1”组成的整数能被 2013 整除。 #include using namespace std;
int main() {
double value=0; for(int n=1;n<=10000 ;++n) {
value=value*10+1; if(value%2013==0) {
cout<<"n 至少为 :" }计算n值的问题能精确求解吗编写程序,求解满足给定精度要求的 n值 #include using namespace std; int main () double a,b; double arctan(double x); 圣经上说:神 6 天创造天地万有,第 7 日安歇。为什么是 6 天 呢任何一个自然数的因数中都有 1 和它本身, 所有小于它本身的因数称为这个数的真因数, 如果一个自然数的真因数之和等于它本身,这个自然数称为完美数。例如, 6=1+2+3,因此 6 是完美数。神 6 天创造世界,暗示着该创造是完美的。设计算法,判断给定的自然数是否 是完美数 #include using namespace std; int main() { int value, k=1; cin>>value; for (int i = 2;i!=value;++i) { while (value % i == 0 ) { k+=i;有4个人打算过桥,这个桥每次最多只能有两个人同时通过。他们都在 桥的某一端,并且是在晚上,过桥需要一只手电筒,而他们只有一只手电筒。这就意味着 两个人过桥后必须有一个人将手电筒带回来。每个人走路的速度是不同的:甲过桥要用 1 分钟,乙过桥要用 2 分钟,丙过桥要用 5 分钟,丁过桥要用 10 分钟,显然,两个人走路的 速度等于其中较慢那个人的速度,问题是他们全部过桥最少要用多长时间 由于甲过桥时间最短,那么每次传递手电的工作应有甲完成 甲每次分别带着乙丙丁过桥 例如: 第一趟:甲,乙过桥且甲回来 第二趟:甲,丙过桥且甲回来 第一趟:甲,丁过桥 一共用时19小时 9 •欧几里德游戏:开始的时候,白板上有两个不相等的正整数,两个玩家交替行动, 每次行动时,当前玩家都必须在白板上写出任意两个已经出现在板上的数字的差,而且这 个数字必须是新的,也就是说,和白板上的任何一个已有的数字都不相同,当一方再也写 不出新数字时,他就输了。请问,你是选择先行动还是后行动为什么 设最初两个数较大的为 a,较小的为b,两个数的最大公约数为 factor。 则最终能出现的数包括 :factor, factor*2, factor*3,…,factor*(a/factor)=a. —共 a/factor 个。 如果a/factor是奇数,就选择先行动;否则就后行动。 习题2 1 •如果 Ti(n)=O(f (n)),T2(n)=O(g(n)),解答下列问题: (1 )证明加法定理: T 1(n)+ T2(n)=max{ O(f (n)), O(g(n))}; (2 )证明乘法定理: T1(n)x T2(n)=O(f (n)) x O(g(n)); (3)举例说明在什么情况下应用加法定理和乘法定理 (1) (2) (3)比如在 for (f(n)) { for(g( n)) 中应该用乘法定理 如果在“讲两个数组合并成一个数组时” ,应当用加法定理 2 •考虑下面的算法,回答下列问题:算法完成什么功能算法的基本语句是什么基本语句 { int S = 0; (1) for (int i = 1; i <= n; i++) 完成的是1-n的平方和 (2) int Q(int n) { if (n == 1) return 1; 基本语句:s+=i*i,执行了 n次 时间复杂度0 (n) (2) (2)完成的是n的平方 基本语句: return Q( n-1) + 2 * n -1,执行了 n次 时间复杂度0 (n) 3. 分析以下程序段中基本语句的执行次数是多少,要求列出计算公式。 (1) for (i = 1; i <= n; i++) if (2*i <= n) for (j = 2*i; j <= n; j++) (2) m = 0; for (i = 1; i <= n; i++) for (j = 1; j <= 2*i; (1) 基本语句2*i基本语句y = y + i * j执行了 2/n次 一共执行次数=n/2+n/2=0 (n) (2)基本语句 m+=1 执行了 (n/2)*n=0(n*n) 4. 使用扩展递归技术求解下列递推关系式: (4)T(n) 4 n 1 3T (n 1) n 1 ⑵ T(n) 1 n 1 2T( n 3) n n 1 (1) int T(int n) { if(n==1) return 4; else if(n>1) return 3*T(n-1); } (2) int T(int n) { if(n==1) return 1; else if(n>1) return 2*T(n/ 3)+n; } 5. 求下列问题的平凡下界,并指出其下界是否紧密。 (1)求数组中的最大元素; (2)判断邻接矩阵表示的无向图是不是完全图; (3)确定数组中的元素是否都是惟一的; ( 4)生成一个具有 n 个元素集合的所有子集 ⑴ Q(n) 紧密 (2) Q(n*n) ⑶ Q(logn+n)(先进行快排,然后进行比较查找) (4) Q(2A n) 7.画出在三个数 a, b, c中求中值问题的判定树。 &国际象棋是很久以前由一个印度人 Shashi发明的,当他把该发明献给国王时,国王 很高兴,就许诺可以给这个发明人任何他想要的奖赏。 Shashi要求以这种方式给他一些粮 食:棋盘的第1个方格内只放1粒麦粒,第2格2粒,第3格4粒,第4格8粒,…… 以此类推,直到64个方格全部放满。这个奖赏的最终结果会是什么样呢 #in clude using n amespace std; int mai n() { long double result=1; double j=1; for(int i=1;i<=64;++i) { j=j*2; result+=j; j++; 曰. ab 曰. 曰. cout } 习题3 1.假设在文本"ababcabccabccacbab"中查找模式"abccac",写出分别采用 算法的串匹配过 式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将 #in clude using n amespace std; int mai n() { int n;数字游戏。把数字1,2,…,9这9个数字填入以下含有加、减、乘 算式中,使得该等式成立。要求 9个数字均出现一次且仅出现一次,且数字 乘和除的一位数中(即排除运算式中一位数为 1的平凡情形)。 BF算法和 KMP 6/8化简为3/4。 、除的四则运 1不能出现在
算法设计与分析习题答案
算法设计与分析习题答案算法设计与分析是计算机科学中一个重要的领域,它涉及到算法的创建、优化以及评估。
以下是一些典型的算法设计与分析习题及其答案。
习题1:二分查找算法问题描述:给定一个已排序的整数数组,编写一个函数来查找一个目标值是否存在于数组中。
答案:二分查找算法的基本思想是将数组分成两半,比较中间元素与目标值的大小,如果目标值等于中间元素,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找。
这个过程会不断重复,直到找到目标值或搜索范围为空。
```pythondef binary_search(arr, target):low, high = 0, len(arr) - 1while low <= high:mid = (low + high) // 2if arr[mid] == target:return Trueelif arr[mid] < target:low = mid + 1else:high = mid - 1return False```习题2:归并排序算法问题描述:给定一个无序数组,使用归并排序算法对其进行排序。
答案:归并排序是一种分治算法,它将数组分成两半,分别对这两半进行排序,然后将排序好的两半合并成一个有序数组。
```pythondef merge_sort(arr):if len(arr) > 1:mid = len(arr) // 2left_half = arr[:mid]right_half = arr[mid:]merge_sort(left_half)merge_sort(right_half)i = j = k = 0while i < len(left_half) and j < len(right_half): if left_half[i] < right_half[j]:arr[k] = left_half[i]i += 1else:arr[k] = right_half[j]j += 1k += 1while i < len(left_half):arr[k] = left_half[i]i += 1k += 1while j < len(right_half):arr[k] = right_half[j]j += 1k += 1arr = [38, 27, 43, 3, 9, 82, 10]merge_sort(arr)print("Sorted array is:", arr)```习题3:动态规划求解最长公共子序列问题问题描述:给定两个序列,找到它们的最长公共子序列。
算法设计技巧与分析(沙特版) 第1_2章课后习题参考解答
lim
n
2n 3log100 n ,所以,2n+3log100n=(n)。 2 n
3 3 nlogn 3n 7n3 1000 7 ,所以,7n +1000nlog n+3n =(n ). 3 n
lim
n
lim
n
n
3n1.5 n1.5 logn ,所以,3n1.5+n1.5log n=(n1.5log n). 1 n1.5 logn
3
g(n) 100n +2n+100 10n+log log n 10nlog log n log n 5
n 2 2
f=O(g) False True False True False
f=(g) True True True False True
f=(g) False True False False False
2n 100n n! ,所以,2n+100n+ n!=(n!). 1 n!
lim
1.16 解答: (a) 算法执行元素比较运算的最小次数是 n-1。当输入 A[1..n] 已经有非减次序时该算法执 行元素比较运算次数达到这个最小值。 (b) 算法执行元素比较运算的最大次数是(n-1)+( n-2)+…+ 2+1=n(n-1)/2。当输入 A[1..n] 已有递减次序时该算法执行元素比较运算次数达到这个最大值。 (c) 算法执行元素赋值运算的最小次数是 0。 当输入 A[1..n] 已经有非减次序时该算法执行元 素赋值运算次数达到这个最小值。 (d) 算法执行元素赋值运算的最大次数是 3[(n-1)+( n-2)+…+ 2+1]=3n(n-1)/2。当输入 A[1..n] 已有递减次序时该算法执行元素赋值运算次数达到这个最大值。 (e) 使用记号 O 和 ,算法 BUBBLESORT 的运行时间分别表示为(n2)和(n)。 (f) 该算法的运行时间不能使用记号来表示,这是因为算法的运行时间范围为 n 的一次方 到二次方。 2.16 解答: (a) 一方面,∑j=1n jlog j≤∑j=1n nlog n≤n 2 log n, 另一方面,∑j=1n jlog j≥∑j= n/2 n n/2log n/2 ≥n/2 n/2log n/2 ≥(n-1)n/4·log(n/2)。 n 因此,∑j=1 jlog j= (n 2logn)。 (b)令 f(x)=x log x (x≥1)。由于 f(x) 是增函数,故有 ∑j=1n jlog j≤∫1n+1 x log xdx≤(2(n+1)2 ln(n+1)-(n+1)2+1) / (4ln2); 同时, ∑j=1n jlog j=∑j=2n jlog j≥∫1n x log xdx≥(2n2 lnn-n2+1) / (4ln2)。 因此,∑j=1n jlog j= (n 2lnn)= (n 2logn)。 2.18 解答: (a) 特征方程为 x=3。
数据结构(第二版)课后习题答案(王红梅主编)
数据结构(第二版)课后习题答案(王红梅主编)第1 章绪论课后习题讲解1. 填空⑴(数据元素)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据元素⑵(数据项)是数据的最小单位,(数据元素)是讨论数据结构时涉及的最小数据单位。
,数据结构指的是数据元素以及数据元素之间的关系。
⑶ 从逻辑关系上讲,数据结构主要分为(集合)、(线性结构)、(树结构)和(图结构)。
,,,⑷ 数据的存储结构主要有(顺序存储结构)和(链接存储结构)两种基本方法,不论哪种存储结构,都要存储两方面的内容:(数据元素)和(数据元素之间的关系)。
⑸ 算法具有五个特性,分别是(有零个或多个输入)、(有一个或多个输出)、(有穷性)、(确定性)、(可行性)。
,,,,⑹ 算法的描述方法通常有(自然语言)、(程序设计语言)、(流程图)和(伪代码)四种,其中,(伪代码)被称为算法语言。
,,,,⑺ 在一般情况下,一个算法的时间复杂度是(问题规模)的函数。
⑻ 设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(Ο(1) ),若为n*log25n,则表示成数量级的形式为(Ο(nlog2n))。
,用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴ 顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵ 假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
A 树B 图C 线性表D 集合B将丈夫、妻子和子女分别作为数据元素,根据题意画出逻辑结构图。
数据结构(第二版)课后习题答案(王红梅主编)
第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
算法设计与分析-王-第1章-算法设计基础
2)有没有已经解决了的类似问题可供借鉴?
1.4 算法设计的一般过程
在模型建立好了以后,应该依据所选定的模型对问 题重新陈述,并考虑下列问题: (1)模型是否清楚地表达了与问题有关的所有重要
的信息?
(2)模型中是否存在与要求的结果相关的数学量? (3)模型是否正确反映了输入、输出的关系? (4)对这个模型处理起来困难吗?
程序设计研究的四个层次:
算法→方法学→语言→工具
理由2:提高分析问题的能力
算法的形式化→思维的逻辑性、条理性
1.2 算法及其重要特性
一、算法以及算法与程序的区别
例:欧几里德算法——辗转相除法求两个自然数 m 和 n 的最大公约数
m n
欧几里德算法
r
1.2 算法及其重要特性
欧几里德算法
① 输入m 和nห้องสมุดไป่ตู้如果m<n,则m、n互换;
对不合法的输入能作出相适应的反映并进行处理。 (2) 健壮性(robustness): 算法对非法输入的抵抗能力, 即对于错误的输入,算法应能识别并做出处理,而不是 产生错误动作或陷入瘫痪。 (3)可读性:算法容易理解和实现,它有助于人们对算 法的理解、调试和修改。 (4) 时间效率高:运行时间短。 (5) 空间效率高:占用的存储空间尽量少。
算法设计与分析
Design and Analysis of Computer Algorithms
高曙
教材:
算法设计与分析(第二版),清华大学出版社,王红梅, 胡明 编著
参考书目:
Introduction to Algorithms, Third Edition, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,机械工 业出版社,2012
算法设计与分析习题解答
算法设计与分析习题解答第一章作业1.证明下列Ο、Ω和Θ的性质1)f=Ο(g)当且仅当g=Ω(f)证明:充分性。
若f=Ο(g),则必然存在常数c1>0和n0,使得?n≥n0,有f≤c1*g(n)。
由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。
必要性。
同理,若g=Ω(f),则必然存在c2>0和n0,使得?n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。
2)若f=Θ(g)则g=Θ(f)证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得?n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。
由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。
3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。
证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得?n≥n1,有F(n) ≤ c1 (f(n)+g(n))= c1 f(n) + c1g(n)≤ c1*max{f,g}+ c1*max{f,g}=2 c1*max{f,g}所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))对于Ω和Θ同理证明可以成立。
4)log(n!)= Θ(nlogn)证明:由于log(n!)=∑=ni i 1log ≤∑=ni n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。
由于对所有的偶数n 有,log(n!)= ∑=ni i 1log ≥∑=nn i i 2/log ≥∑=nn i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。
算法设计与分析课后部分习题答案
算法实现题3-7 数字三角形问题问题描述:给定一个由n行数字组成的数字三角形,如图所示。
试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
编程任务:对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。
数据输入:有文件input.txt提供输入数据。
文件的第1行是数字三角形的行数n,1<=n<=100。
接下来的n行是数字三角形各行的数字。
所有数字在0-99之间。
结果输出:程序运行结束时,将计算结果输出到文件output.txt中。
文件第1行中的数是计算出的最大值。
输入文件示例输出文件示例 input.txt output.txt 5 30 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5源程序:#include "stdio.h" voidmain(){ intn,triangle[100][100],i,j;//triangle数组用来存储金字塔数值,n表示行数 FILE *in,*out;//定义in,out两个文件指针变量in=fopen("input.txt","r");fscanf(in,"%d",&n);//将行数n读入到变量n中for(i=0;i<n;i++)//将各行数值读入到数组triangle中for(j=0;j<=i;j++)fscanf(in,"%d",&triangle[i][j]);for(int row=n-2;row>=0;row--)//从上往下递归计算for(int col=0;col<=row;col++)if(triangle[row+1][col]>triangle[row+1][col+1])triangle[row][col]+=triangle[row+1][col];elsetriangle[row][col]+=triangle[row+1][col+1];out=fopen("output.txt","w");fprintf(out,"%d",triangle[0][0]);//将最终结果输出到output.txt中 }算法实现题4-9 汽车加油问题问题描述:一辆汽车加满油后可行驶nkm。
算法设计与分析课后习题
1、实验内容递归求n的二次方各项的系数。
2、程序设计代码如下:#include"stdio.h"void coeff(int a[],int n)if(n==1)a[1]=1;a[2]=1;elsecoeff(a,n-1);a[n+1]=1;for(int i=n;i>=2;i=i-1)a[i]=a[i]+a[i-1];a[1]=1;void main()int a[100],i,n;printf("输入n的值:");scanf("%d",&n);coeff(a,n);for(i=1;i<=n+1;i++)printf(" %d ",a[i]);printf("\n");1、实验内容写出计算ackerman函数ack(m,n)的递归计算函数。
2、程序设计代码如下:#include "stdio.h"int ack(int m,int n)if(m==0)return n+1;else if(n==0)return ack(m-1,1);elsereturn ack(m-1,ack(m,m-1));void main()int m,n,z;printf("input m and n:");scanf("%d %d",&m,&n);if(m<0 && n<0)printf("error input!");elsez=ack(m,n);printf("%d\n",z);第四章例15 求数列的最大子段和给定n个元素的整数列(可能为负整数)a1,a2,…..,an。
求形如:ai,ai+1,……aj i,j=1,…..,n,i<=j的子段,使其和为最大。
第2章 算法分析基础(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)
3
Page 11
2.1.2 算法的渐近分析
常见的时间复杂度:
Ο(1)<(log2n)<(n)<(nlog2n)<(n2)<(n3)<…<(2n)<(n!)
多项式时间,易解问题
算
法
指数时间,难解问题
设 计 与
分
析
(
第
时间复杂度是在不同数量级的层面上比较算法
版 )
清
华
大
学
时间复杂度是一种估算技术(信封背面的技术)
Page 7
2.1.2 算法的渐近分析
3
每条语句执行次数之和 = 算法的执行时间 = 每条语句执行时间之和
基本语句的执行次数 for (i = 1; i <= n; i++)
单位时间
算
法
设
计
与
执行次数 × 执行一次的时间
分 析 (
第
for (j = 1; j <= n; j++)
版 )
x++;
指令系统、编译的代码质量
算法设计:面对一个问题,如何设计一个有效的算法
算
法
设
检
指
验
导
评
计 与 分 析 ( 第 版
改
估
) 清
进
华 大
学
出
版
算法分析:对已设计的算法,如何评价或判断其优劣
社
3
Page 3
2.1.1 输入规模与基本语句
如何度量算法的效率呢?
事后统计:将算法实现,测算其时间和空间开销
缺点:(1)编写程序实现算法将花费较多的时间和精力 (2)所得实验结果依赖于计算机的软硬件等环境因素
算法设计与分析王红梅第二分治法PPT学习教案
于轴值; (2)求解子问题:分别对 [ r1 … … ri-1 ] ri [ ri+1 … … rn ]
划分后的每一个子序列递
归处理;
(3)合并:由于对子序列 r1 … ri-1和ri+1 … rn的排序是 就地进行的,所以合并不
均≤ri 轴值 均≥ri 位于最终位置
需要执行任何操作。
第23页/共85页
T (n)
=
1
2T
(n
2)
+n
n =2 n >2
根据2.1.5节的通用分治递推定理,二路归并排序的 时间代价是O(nlog2n)。
第22页/共85页
2021/8/26
22
4.2.2 快速排序
快速排序的分治策略
(1)划分:选定一个记录作为轴值,以轴值为基准将整个序
列划分为两个子序列r1 … ri-1和ri+1 … rn,前一个子序列中记录 的值均小于或等于轴值,后一个子序列中记录的值均大于或等
算法4.4——合并有序子序列 void Merge(int r[ ], int r1[ ], int s, int m, int t)
{ // i,j分 别 指 向 两个 待合并 的有序 子序列 ,k指 向 最终 有序序 列的当 前记录
i=s; j=m+1; k=s;
i
j
r[s],…,r[m] r[m+1],…,r[t]
3. 初始化行、列下标i=begin,j=begin;
4. 重复下述操作size-1次,填写区域A
1. Data[i][j]=number; number++; i++;
第12页/共85页
2021/8/26
