Java 在霍尔';s分割

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++;

我一直在试图找出当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++;

  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期间,它会在临时步骤中被交换(如果需要)。