【发布时间】:2014-10-25 20:28:56
【问题描述】:
我通过选择第一个元素作为枢轴来实现快速排序。它适用于一般测试用例,但考虑数组反向排序的情况,例如 5 4 3 2 1。我知道它在哪里引发运行时错误。但我无法正确修复它。第一个元素作为枢轴的实现是否正确?请提出修改建议。
public static void quicksort(int low,int high)
{
if(low<high)
{
int temp=0;
int pivot=a[low];
int large_index=low+1;
int small_index=high;
while(large_index<=small_index)
{
while(a[small_index]>pivot)
small_index--;
while(a[large_index]<pivot)
large_index++;
if(large_index<=small_index)
{
temp = a[large_index];
a[large_index]= a[small_index];
a[small_index]= temp;
large_index++;
small_index--;
}
}
temp = a[small_index];
a[small_index]= a[low];
a[low]= temp;
quicksort(low,small_index-1);
quicksort(small_index+1,high);
}
}
【问题讨论】:
-
也许尝试使用您的调试器?
-
至少提供堆栈跟踪。
-
缩进代码并删除不必要的代码。
标签: java algorithm pivot quicksort divide-and-conquer