快速排序算法中分区函数的修改

时间:2016-02-17 01:09:39

标签: python sorting quicksort partitioning

以下是我对作业的快速排序的实现。分区功能有望将列表分为三个部分。一个元件具有小于枢轴的元件,一个元件具有等于枢轴的元件,一个元件具有大于枢轴的元件。然后它应该返回包含等于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]

0 个答案:

没有答案