问题描述
下面给定的程序应该从列表中随机选择一个元素,即 piv
并返回列表,其中所有小于 piv
的元素在左侧,较大的元素在左侧列表中 piv
的右侧。但我没有得到任何输出,只有空白屏幕。
示例INPUT:[7,9,4,8,3,6,2,5]
如果 piv=8 可能的输出之一 OUTPUT:[4,7,5,9]
import random
def swap(arr,a,b):
arr[a],arr[b]=arr[b],arr[a]
return arr
def partition(arr,n):
piv=random.choice(arr)
j=(n-1)
i=0
while(i<j):
if(arr[i]<piv and arr[j]<piv):
i+=1
elif(arr[i]>piv and arr[j]>piv):
j-=1
elif(arr[i]>piv and arr[j]<piv):
swap(arr,i,j)
j-=1
i+=1
elif(arr[i]<piv and arr[j]>piv):
j-=1
i+=1
return arr
z=[7,5]
y=partition(z,8)
print(y)
解决方法
您只需要添加一些大于号或等号,因为算法没有考虑 piv 和值可以相同。
import random
def swap(arr,a,b):
arr[a],arr[b] = arr[b],arr[a]
return arr
def partition(arr,n):
piv = random.choice(arr)
print(piv)
j = (n-1)
i = 0
while(i < j):
if(arr[i] < piv and arr[j] < piv):
i += 1
elif(arr[i] > piv and arr[j] > piv):
j -= 1
elif(arr[i] >= piv and arr[j] <= piv):
swap(arr,i,j)
j -= 1
i += 1
elif(arr[i] <= piv and arr[j] >= piv):
j -= 1
i += 1
return arr
z = [7,9,4,8,3,6,2,5]
y = partition(z,8)
print(y)
,
import random
def swap(arr,arr[b]=arr[b],arr[a]
return arr
def partition(arr,n):
piv=random.randint(0,len(arr)-1)#randomly chooses an integer to be pivot
print(arr)
#print(piv,arr[piv])
print("The partition is being done around element :",arr[piv])
#print(arr)
arr[len(arr)-1],arr[piv] = arr[piv],arr[len(arr)-1]#swaps pivot with last element
#print(arr)#updated array
i = -1
j = 0
pivot = arr[len(arr)-1]
for j in range(len(arr)):
if(arr[j] < pivot):
i += 1
arr[i],arr[j] = arr[j],arr[i]
arr[i+1],arr[len(arr)-1] = arr[len(arr)-1],arr[i+1]
return arr
z=[7,5]
y=partition(z,8)
print(y)