当枢轴是第一个元素并且枢轴是最后一个元素时,我一直试图弄清楚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行不同。这些是正确的,或者如果我使用这些算法中的任何一个进行快速排序,我会得到任何测试用例的失败吗?任何帮助将不胜感激,提前谢谢。