我通过选择第一个元素作为支点,实现了快速排序。它适用于一般的测试用例,但考虑一个例子,当数组被反向排序时,例如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);
}
}
也许尝试使用您的调试器? – 2014-09-01 15:09:32
至少提供堆栈跟踪。 – 2014-09-01 15:12:49
请缩进... – 2014-09-01 15:21:29