Java 在霍尔';s分割
我一直在试图找出当pivot是第一个元素和pivot是最后一个元素时hoare分区实现的差异。我已经在下面记录了我的观察结果,但我不确定下面的内容 最后一个元素作为轴心Java 在霍尔';s分割,java,arrays,algorithm,sorting,java-8,Java,Arrays,Algorithm,Sorting,Java 8,我一直在试图找出当pivot是第一个元素和pivot是最后一个元素时hoare分区实现的差异。我已经在下面记录了我的观察结果,但我不确定下面的内容 最后一个元素作为轴心 partition(arr[], lo, hi) { pivot = arr[hi] i = lo // Initialize left index j = hi // Initialize right index while(true) { while (arr[i] < pivot) i++;
partition(arr[], lo, hi)
{
pivot = arr[hi]
i = lo // Initialize left index
j = hi // Initialize right index
while(true)
{
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if i >= j
return i; // line z
swap(arr[i],arr[j]);
i++;
j--;
}
}
partition(arr[], lo, hi)
{
pivot = arr[lo]
i = lo // Initialize left index
j = hi // Initialize right index
while(true)
{
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if i >= j
return j; //line z
swap(arr[i],arr[j]);
i++;
j--;
}
}
分区(arr[],lo,hi)
{
pivot=arr[hi]
i=lo//初始化左索引
j=hi//初始化右索引
while(true)
{
while(arr[i]pivot)
j--;
如果i>=j
返回i;//行z
掉期(arr[i],arr[j]);
i++;
j--;
}
}
在进行快速排序时,对分区的函数调用如下所示
quicksort(int[] arr,int low,int high)
{
if(low<high)
{
int pivot=partition(arr,low,high);
quicksort(arr, low, pivot-1); // line x
quicksort(arr, pivot, high); // line y
}
}
quicksort(int[] arr,int low,int high)
{
if(low<high)
{
int pivot=partition(arr,low,high);
quicksort(arr, low, pivot); // line x
quicksort(arr, pivot+1, high); //line y
}
}
quicksort(int[]arr,int-low,int-high)
{
if(低枢轴)
j--;
如果i>=j
返回j;//行z
掉期(arr[i],arr[j]);
i++;
j--;
}
}
在进行快速排序时,对分区的函数调用如下所示
quicksort(int[] arr,int low,int high)
{
if(low<high)
{
int pivot=partition(arr,low,high);
quicksort(arr, low, pivot-1); // line x
quicksort(arr, pivot, high); // line y
}
}
quicksort(int[] arr,int low,int high)
{
if(low<high)
{
int pivot=partition(arr,low,high);
quicksort(arr, low, pivot); // line x
quicksort(arr, pivot+1, high); //line y
}
}
quicksort(int[]arr,int-low,int-high)
{
如果(lowHoare分区方案可以使用任何元素作为轴心。使用中间元素是常见的。但是,在继续分区之前,中间元素会与最后一个或第一个元素交换。我只想知道我看到的这两种方式的实现和差异是否有效。对于Hoare分区方案,轴心不在初始交换,或在分区步骤结束之前交换。相反,在交换值pivot期间,它会在临时步骤中被交换(如果需要)。