文章目录
- 问题一
- 问题二
- 快排
问题一
给定一-个数组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))