在hoare的分区

时间:2017-06-13 20:56:43

标签: java arrays algorithm sorting java-8

当枢轴是第一个元素并且枢轴是最后一个元素时,我一直试图弄清楚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--;    
  }
}

并且在执行quicksort时,对分区的函数调用将如下所示

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
 }
}

第一个元素作为支点

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

并且在执行quicksort时,对分区的函数调用将如下所示

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
 }
}

我所做的观察是两行代码的x,y和z行不同。这些是正确的,或者如果我使用这些算法中的任何一个进行快速排序,我会得到任何测试用例的失败吗?任何帮助将不胜感激,提前谢谢。

0 个答案:

没有答案