【发布时间】:2016-01-13 06:10:23
【问题描述】:
我尝试编写了一个以中间元素为轴心的快速排序代码。
我写的很成功。
但 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);
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;
}
主要方法:
int a[]={5,7,3,9,1};
int n = a.length;
QuickSortAlgorithm(a,0,n-1);
System.out.println(Arrays.toString(a));
我的疑问是:
我将左发送作为我的分区索引。
但是,当我递归调用 QuickSortAlgorithm()
我正在发送i to part-1和part to n;
我应该发送什么作为分区索引以便
我可以这样称呼:所以枢轴属性得到满足?
QuickSortAlgorithm(a, i, part-1);
QuickSortAlgorithm(a, part+1, n);
谢谢:)
【问题讨论】: