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) 在上述算法 PARTITION(m,p)PARTITION(m,p)PARTITION(m,p) 中,将 if(i<p)if (i<p)if(i<p) 改为 if(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==pi==pi==p 时,原地置换 A[i]A[i]A[i]A[p]A[p]A[p] ,并且多进入一轮循环,然后 i>pi>pi>p 跳出循环,导致多进行一次比较及运算。

(2)当 if(i<p)if (i<p)if(i<p)
51,4,3,2,52,8,95_1,4,3,2,5_2,8,9514325289
[52,4,3,2],51,[8,9][5_2,4,3,2],5_1,[8,9][52432]51[89]
[2,3,4],52,51,[8,9][2,3,4],5_2,5_1,[8,9][234]5251[89]
2,[4,3],52,51,[8,9]2,[4,3],5_2,5_1,[8,9]2[43]5251[89]
2,[3],4,52,51,[8,9]2,[3],4,5_2,5_1,[8,9]2[3]45251[89]
2,3,4,52,51,[8,9]2,3,4,5_2,5_1,[8,9]2345251[89]
2,3,4,52,51,8,[9]2,3,4,5_2,5_1,8,[9]23452518[9]
2,3,4,52,51,8,92,3,4,5_2,5_1,8,9234525189

(2)当 if(i≤p)if (i≤p)if(ip)
51,4,3,2,52,8,95_1,4,3,2,5_2,8,9514325289
[2,4,3],51,[52,8,9][2,4,3],5_1,[5_2,8,9][243]51[5289]
2,[4,3],51,[52,8,9]2,[4,3],5_1,[5_2,8,9]2[43]51[5289]
2,[3],4,51,[52,8,9]2,[3],4,5_1,[5_2,8,9]2[3]451[5289]
2,3,4,51,[52,8,9]2,3,4,5_1,[5_2,8,9]23451[5289]
2,3,4,51,52,[8,9]2,3,4,5_1,5_2,[8,9]2345152[89]
2,3,4,51,52,8,[9]2,3,4,5_1,5_2,8,[9]23451528[9]
2,3,4,51,52,8,92,3,4,5_1,5_2,8,9234515289

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

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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐