Python 这是随机快速排序的正确实现吗? #随机快速排序 随机输入 def分区(阵列、低、高): i=低-1 枢轴=阵列[高] 对于范围内的j(低、高): 如果数组[j]这是一个极好的学习机会。如果您不知道您的实现是否正确,请编写一些使用QuickSort函数的单元
这是随机快速排序的正确实现吗?Python 这是随机快速排序的正确实现吗? #随机快速排序 随机输入 def分区(阵列、低、高): i=低-1 枢轴=阵列[高] 对于范围内的j(低、高): 如果数组[j]这是一个极好的学习机会。如果您不知道您的实现是否正确,请编写一些使用QuickSort函数的单元,python,algorithm,sorting,data-structures,Python,Algorithm,Sorting,Data Structures,这是随机快速排序的正确实现吗? #随机快速排序 随机输入 def分区(阵列、低、高): i=低-1 枢轴=阵列[高] 对于范围内的j(低、高): 如果数组[j]这是一个极好的学习机会。如果您不知道您的实现是否正确,请编写一些使用QuickSort函数的单元测试,并测试结果是否与您的预期输出相匹配。非常感谢您的回答。实际上,上面的代码正确地提供了排序数组。但我也从非随机快速排序中得到了同样的答案(这很明显)。我的疑问是,我无法确定此实现是否会提供O(nlogn)的最坏情况。另一方面,正常的快速排序
#随机快速排序
随机输入
def分区(阵列、低、高):
i=低-1
枢轴=阵列[高]
对于范围内的j(低、高):
如果数组[j]这是一个极好的学习机会。如果您不知道您的实现是否正确,请编写一些使用QuickSort
函数的单元测试,并测试结果是否与您的预期输出相匹配。非常感谢您的回答。实际上,上面的代码正确地提供了排序数组。但我也从非随机快速排序中得到了同样的答案(这很明显)。我的疑问是,我无法确定此实现是否会提供O(nlogn)的最坏情况。另一方面,正常的快速排序大约是O(n^2)。如果我错了,请纠正我。随机性不会改变快速排序是最坏情况O(n²)的事实。这使得公共输入(如(大部分)排序数据)的结果不太可能出现。对于随机输入,QS预期为O(n logn);您可以在开始之前进行随机洗牌(一次),而不是随机选择分区,这将有效地使输入随机。
#Randomized Quick Sort
import random
def partition(array , low , high):
i = low - 1
pivot = array[high]
for j in range( low , high):
if array[j] <= pivot:
i += 1
array[i],array[j] = array[j],array[i] # Swapping
arr[i+1],arr[high] = arr[high],arr[i+1]
return(i+1)
def QuickSort(array,low,high):
if low < high:
random_value = random.randint(low,high)
array[random_value] , array[high] = array[high], array[random_value]
mid = partition(array,low,high)
QuickSort(array,low,mid-1)
QuickSort(array,mid+1,high)
arr = [1,2,3,4,5,6,7,8,9,10]
n = len(arr)
QuickSort(arr,0,n-1)
print ("Sorted array is:")
for i in range(n):
print (arr[i])