荷兰国旗问题———明显分三类情况下使用

详解如代码显示

# 荷兰国旗问题  分三块

# 在arr[L...R]上,根据P(划分值)分块,<p 在左边;==p 的中间; >p的,在右边
# 返回值,是一定会返回一个长度为2的数组,记录等于区域的左右边界
# arr = [ ... 3 5 5 4 6 7 ... ]
# index =     4 5 6 7 8 9 
# p = 5
#arr = [ ... (3 4) 5 5 (6 7 )... ]

#荷兰国旗问题有一个核心就是partition,返回值就是等于区域的左右边界
def swap(arr,i,j):
	tmp = arr[i]
	arr[i] = arr[j]
	arr[j] = tmp
def partiton(arr,L,R,P):
	less = L -1 # <区域的右边界
	more = R +1 # >区域的左边界
	index = L
	while(index < more):
		'''
		如果当前数小于划分值:
		(1)当前数与小于区域的下一个值交换,
		(2)小于区域向右扩
		(3)当前数跳下一个
		'''
		if arr[index]<P:
			swap(arr,index,less+1)#(1)
			less += 1 	#(2)
			index += 1	#(3)
			
		
		#如果当前数大于划分值:
		#(1)当前数与大于区域的前一个数交换
		#(2)大于区域向左扩
		#(3)当前数不动		
		elif arr[index]>P:
			swap(arr,index,more-1)# 对应(1)
			more -= 1	# (2)

		#如果当前数等于划分值:
		#当前数直接跳下一个
		else:
			index+=1

	return [less+1,more-1]



if __name__ == "__main__":
	arr = [1,5,6,8,3,4,9,2,9,7]
	#index:0 1 2 3 4 5 6 7 8 9
	print(arr)
	res = []
	res = partiton(arr,0,len(arr)-1,5)
	print(res[0])
	print(res[1])
	print(arr)
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值