Java 以中间元素为轴心实现快速排序
我尝试并编写了一个以中间元素为轴心的快速排序代码 我成功地写了一本 但Pivot具有以下特性: 左侧的元素小于枢轴,右侧的元素大于枢轴 我无法在下面的代码中实现这一点Java 以中间元素为轴心实现快速排序,java,pivot,quicksort,Java,Pivot,Quicksort,我尝试并编写了一个以中间元素为轴心的快速排序代码 我成功地写了一本 但Pivot具有以下特性: 左侧的元素小于枢轴,右侧的元素大于枢轴 我无法在下面的代码中实现这一点 private static void QuickSortAlgorithm(int[] a, int i, int n) { if(i<n) { int part = partition(a,i,n); QuickSortAlgorithm(a, i, part-1);
private static void QuickSortAlgorithm(int[] a, int i, int n)
{
if(i<n)
{
int part = partition(a,i,n);
QuickSortAlgorithm(a, i, part-1);
QuickSortAlgorithm(a, part, n);
}
}
private static int partition(int[] a, int i, int n)
{
int pivot = (i+n)/2;
int left = i;
int right = n;
while(left<=right)
{
while(a[left]<a[pivot]){
left++;
}
while(a[right]>a[pivot])
{
right--;
}
if(left<=right)
{
swap(a,left,right);
left++;
right--;
}
}
return left;
}
我的疑问是:
我正在发送左作为我的分区索引
但是,当我递归调用QuickSortAlgorithm()时
我正在将I发送到第1部分
和部分发送到第n部分
我应该发送什么作为分区索引以便
我可以这样称呼:这样就满足了pivot属性
QuickSortAlgorithm(a, i, part-1);
QuickSortAlgorithm(a, part+1, n);
谢谢:)您可以选择数组中最左边的元素,也可以选择任意随机元素作为轴心
有关选择轴的详细信息,请查看。您可以选择数组中最左侧的元素,也可以选择任意随机元素作为轴
查看以了解有关选择pivot的更多详细信息,您必须在第一个堆栈调用(包括)中发送pivot值,并将pivot+1作为第二个堆栈调用的较低索引。
您还必须将left的值设置为i+1,然后您的代码将给出正确的输出您必须在第一个堆栈调用(包括)中发送pivot值,并将pivot+1作为第二个堆栈调用的较低索引。
您还必须将left的值设为i+1,然后您的代码将给出正确的输出他希望选择中间元素作为轴心,而不是第一个或最后一个!他想选择中间元素作为轴心,而不是第一个或最后一个!
QuickSortAlgorithm(a, i, part-1);
QuickSortAlgorithm(a, part+1, n);