《计算机算法设计与分析》课后练习07

Author:龙箬
Computer Application Technology
Change the World with Data and Artificial Intelligence !
CSDN@weixin_43975035
我行及我道

//算法:用A(m)划分集合A(m:p-1)
procedure PARTITION(m,p)
	integer m,p,i; global A(m:p-1)
	v = A(m); i = m //A(m)是划分元素//
	loop
		loop i = i+1 until A(i) ≥ v repeat //i由左向右移//
		loop p = p-1 until A(p) ≤ v repeat //i由右向左移//
		if (i<p) then
			call INTERCHANGE(A(i), A(p))
		else exit
		endif
	repeat
	A(m) = A(p);
	A(p) = v //划分元素在位置p//
end PARTITION

(1) 在上述算法 P A R T I T I O N ( m , p ) PARTITION(m,p) PARTITION(m,p) 中,将 i f ( i < p ) if (i<p) if(i<p) 改为 i f ( i ≤ p ) if (i≤p) if(ip),有何优缺点?
(2) 在数据集 ( 5 , 4 , 3 , 2 , 5 , 8 , 9 ) (5,4,3,2,5,8,9) (5,4,3,2,5,8,9) 上执行这两个算法,看看他们在执行时有何不同。

解:
(1)优点:不改变所排序数据的稳定性
缺点:当 i = = p i==p i==p 时,原地置换 A [ i ] A[i] A[i] A [ p ] A[p] A[p] ,并且多进入一轮循环,然后 i > p i>p i>p 跳出循环,导致多进行一次比较及运算。

(2)当 i f ( i < p ) if (i<p) if(i<p)
5 1 , 4 , 3 , 2 , 5 2 , 8 , 9 5_1,4,3,2,5_2,8,9 514325289
[ 5 2 , 4 , 3 , 2 ] , 5 1 , [ 8 , 9 ] [5_2,4,3,2],5_1,[8,9] [52432]51[89]
[ 2 , 3 , 4 ] , 5 2 , 5 1 , [ 8 , 9 ] [2,3,4],5_2,5_1,[8,9] [234]5251[89]
2 , [ 4 , 3 ] , 5 2 , 5 1 , [ 8 , 9 ] 2,[4,3],5_2,5_1,[8,9] 2[43]5251[89]
2 , [ 3 ] , 4 , 5 2 , 5 1 , [ 8 , 9 ] 2,[3],4,5_2,5_1,[8,9] 2[3]45251[89]
2 , 3 , 4 , 5 2 , 5 1 , [ 8 , 9 ] 2,3,4,5_2,5_1,[8,9] 2345251[89]
2 , 3 , 4 , 5 2 , 5 1 , 8 , [ 9 ] 2,3,4,5_2,5_1,8,[9] 23452518[9]
2 , 3 , 4 , 5 2 , 5 1 , 8 , 9 2,3,4,5_2,5_1,8,9 234525189

(2)当 i f ( i ≤ p ) if (i≤p) if(ip)
5 1 , 4 , 3 , 2 , 5 2 , 8 , 9 5_1,4,3,2,5_2,8,9 514325289
[ 2 , 4 , 3 ] , 5 1 , [ 5 2 , 8 , 9 ] [2,4,3],5_1,[5_2,8,9] [243]51[5289]
2 , [ 4 , 3 ] , 5 1 , [ 5 2 , 8 , 9 ] 2,[4,3],5_1,[5_2,8,9] 2[43]51[5289]
2 , [ 3 ] , 4 , 5 1 , [ 5 2 , 8 , 9 ] 2,[3],4,5_1,[5_2,8,9] 2[3]451[5289]
2 , 3 , 4 , 5 1 , [ 5 2 , 8 , 9 ] 2,3,4,5_1,[5_2,8,9] 23451[5289]
2 , 3 , 4 , 5 1 , 5 2 , [ 8 , 9 ] 2,3,4,5_1,5_2,[8,9] 2345152[89]
2 , 3 , 4 , 5 1 , 5 2 , 8 , [ 9 ] 2,3,4,5_1,5_2,8,[9] 23451528[9]
2 , 3 , 4 , 5 1 , 5 2 , 8 , 9 2,3,4,5_1,5_2,8,9 234515289

参考致谢:
国科大 马丙鹏老师《计算机算法设计与分析》

如有侵权,请联系侵删
需要本实验源数据及代码的小伙伴请联系QQ:2225872659

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值