Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 快速排序效率:扫描方向是否重要?_Algorithm_Quicksort - Fatal编程技术网

Algorithm 快速排序效率:扫描方向是否重要?

Algorithm 快速排序效率:扫描方向是否重要?,algorithm,quicksort,Algorithm,Quicksort,以下是我对就地快速排序算法的实现,这是一种视频改编: def分区(arr、start、size): 如果(尺寸

以下是我对就地快速排序算法的实现,这是一种视频改编:

def分区(arr、start、size):
如果(尺寸<2):
返回
index=int(数学地板(random.random()*size))
L=开始
U=开始+尺寸-1
枢轴=arr[开始+索引]
而(L枢轴时:
U=U-1
温度=arr[L]
arr[L]=arr[U]
arr[U]=温度
分区(arr、start、L-start)
分区(arr,L+1,大小-(L-start)-1)

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

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

index = int(math.floor(random.random()*size))
索引是随机选择的,所以它可以是第一个元素,也可以是最后一个元素。在链接中,它们最初以最后一个元素为轴心,并以与代码中相同的方式移动

所以这两种方法是相同的。在代码中,您随机选择轴,在图像中,您陈述轴

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