下面给出了我对作业的快速排序的实现 . 分区功能有望将列表分为三个部分 . 一个具有小于枢轴的元件,一个具有等于枢轴的元件,一个具有大于枢轴的元件 . 然后它应该返回包含等于pivot的元素的列表部分的开始和结束索引 . 我编写了以下代码,但每次执行相同的代码时,我都会得到不同的数组作为最终输出 . 请帮忙 .

import random
def random_sort(A,p,r):
  if p<r:
    i =random.randint(p,r)
    temp=A[r]
    A[r]=A[i]
    A[i]=temp
    q,t=partition(A,p,r)
    print(q,t)
    random_sort(A,p,q-1)
    random_sort(A,t+1,r)
  return A
def partition(A,p,r):
  x=A[r]
  i=p-1
  k=p-1
  for j in range(p,r):
    if A[j]<=x:
      i+=1
      temp = A[i]
      A[i]=A[j]
      A[j]=temp
  for j in range(p,i):
    if A[j]<x:
      k+=1
      temp=A[k]
      A[k]=A[j]
      A[j]=temp
    temp=A[i+1]
    A[i+1]=A[r]
    A[r]=temp
  return k+1,i+1
A=[1,2,9,5,2]
p=0
r=len(A)-1 
a=random_sort(A,p,r)
print(a)

示例失败输出:

(3, 4)
(0, 0)
(1, 2)
[2, 1, 2, 5, 9]

示例成功输出:

(1, 2)
(3, 3)
[1, 2, 2, 9, 5]