gpt4 book ai didi

algorithm - 快速排序效率 : does direction of scan matter?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:03:12 24 4
gpt4 key购买 nike

这是我对就地快速排序算法的实现,改编自 this视频:

def partition(arr, start, size):
if (size < 2):
return
index = int(math.floor(random.random()*size))
L = start
U = start+size-1
pivot = arr[start+index]
while (L < U):
while arr[L] < pivot:
L = L + 1
while arr[U] > pivot:
U = U - 1
temp = arr[L]
arr[L] = arr[U]
arr[U] = temp

partition(arr, start, L-start)
partition(arr, L+1, size-(L-start)-1)

似乎有一些扫描步骤的实现,其中数组(或数组的当前部分)被分为 3 段:低于枢轴的元素、枢轴和大于枢轴的元素。我从左边扫描大于或等于枢轴的元素,从右边扫描小于或等于枢轴的元素。一旦找到其中一个,就进行交换,循环继续,直到左边的标记等于或大于右边的标记。然而,在this之后还有另一种方法。在许多情况下导致较少分区步骤的图表。有人可以验证哪种方法实际上对快速排序算法更有效吗?

最佳答案

你使用的两种方法基本相同。在上面的代码中

index = int(math.floor(random.random()*size))

索引是随机选择的,可以是第一个元素,也可以是最后一个元素。在链接https://s3.amazonaws.com/hr-challenge-images/quick-sort/QuickSortInPlace.png他们最初将最后一个元素作为枢轴并以与您在代码中相同的方式移动。

所以这两种方法是一样的。在您的代码中,您随机选择了枢轴,在图像中 - 您声明了枢轴。

关于algorithm - 快速排序效率 : does direction of scan matter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30740942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com