0
点赞
收藏
分享

微信扫一扫

荷兰国旗问题&快排


文章目录

  • ​​问题一​​
  • ​​问题二​​
  • ​​快排​​

问题一

给定一-个数组arr,和一-个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度0(1),时间复杂度0 (N)

def partion1(lis,num,l,r):
i = l
less = l # <=区右边界
while(i<=r):
if lis[i] <= num:
lis[i],lis[less] = lis[less],lis[i] # 与<=区前一个元素做交换
less += 1
i += 1
print('lis[i] <= num',lis)
else:
i += 1
print('lis[i] > num',lis)

return lis

lis = [1,2,3,1,1]
num = 2
l = 0
r = len(lis) - 1
print(partion1(lis,num,l,r))

问题二

给定一个数组arr,和一-个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度0(1),时间复杂度0(N)

def partion1(lis,num,l,r):
i = l
less = l # <区右边界
more = r # >区左边界
while(i<=more):
if lis[i] < num:
lis[i],lis[less] = lis[less],lis[i]
less += 1
i += 1
print('lis[i] < num',lis)
elif lis[i] == num:
i += 1
else:
lis[i],lis[more] = lis[more],lis[i]
more -= 1
print('lis[i] > num',lis)

return lis

lis = [1,2,3,1,1]
num = 2
l = 0
r = len(lis) - 1
print(partion1(lis,num,l,r))

快排

def quick_sort(lis,l,r):

if (l<r):
p = partion(lis,l,r)
quick_sort(lis,l,p[0]-1)
quick_sort(lis,p[1]+1,r)

return lis

def partion(lis,l,r):
i = l
less = l # <区右边界
more = r # >区左边界
while(i<=more):
if lis[i] < lis[r]:
lis[i],lis[less] = lis[less],lis[i]
less += 1
i += 1
print('lis[i] < num',lis)
elif lis[i] == lis[r]:
i += 1
else:
lis[i],lis[more] = lis[more],lis[i]
more -= 1
print('lis[i] > num',lis)

return [less,more]

lis = [1,2,3,1,1,0,0,7,1,1,1]
l = 0
r = len(lis) - 1
print(quick_sort(lis,l,r))


举报

相关推荐

0 条评论