【发布时间】:2015-03-25 03:02:03
【问题描述】:
我正在尝试计算快速排序算法在三种情况下的执行时间“中枢轴,第一个枢轴,随机枢轴”数组已经排序。
mid pivot 和 random 适用于任何大小,但如果大小大于 25000,第一个 pivot 情况会产生 stackoverflow。
代码如下:
static void q_sort( int left, int right)
{
int pivot;
int l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = array[left];
while (left < right)
{
while ((array[right] >= pivot) && (left < right))
right--;
if (left != right)
{
array[left] = array[right];
left++;
}
while ((array[left] <= pivot) && (left < right))
left++;
if (left != right)
{
array[right] = array[left];
right--;
}
}
array[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
q_sort(left,(int) pivot-1);
if (right > pivot)
q_sort( (int)pivot+1, right);
}
这是调用代码:
double startTime1 = System.currentTimeMillis();
q_sort(0,size -1);
double stopTime1 = System.currentTimeMillis();
double elapsedTime1 = stopTime1 - startTime1;
System.out.println(elapsedTime1);
【问题讨论】:
-
如果您不继续重用现有变量来表示不同的东西,您的代码会更容易理解 - 目前
pivot表示枢轴 value 一半的时间,以及其余时间的 index。非常混乱! -
既然已经发明了这个轮子,为什么还要编写自己的快速排序?
-
@JonSkeet 它不是我从这里复制的代码,我只是在为我的老师测试执行时间......所以有什么帮助吗?
-
如果你不能改变代码,那么我们调试它就没有意义了。如果您准确地测量了执行时间,那么您就完成了。如果事情发生爆炸,这不是你的错。只需捕获异常、恢复并报告结果。
标签: java stack-overflow