没有失败,数组大小5000,4998比较。 [32] = 30次比较等。
(编辑不同条件:) 对于奇数大小的数组也是如此:[35]计数33。
我可以继续下去。
这是为什么? Var是qcount。
我不相信分区中有任何比较,虽然我可能错了。我的同学有时会得到大约80倍的数字,所以我们的数量差别很大。
我的代码有效。这很好。只是数量大不相同。
感谢阅读。当我真的不需要时,这让我写得更多。
public class QuickSortTest
{
static int numcalls = 0;
static int qcount = 0;
public static void main(String[] args)
{
Random gen = new Random();
int[] array = new int[5000];
int i;
for (i = 0; i < array.length; i++)
{
array[i] = gen.nextInt(5000) + 1;
}
System.out.println("Initial array:");
for (i = 0; i < array.length; i++)
{
System.out.println(array[i] + " ");
}
System.out.println();
quicksort(array, 0, array.length - 1);
System.out.println("Sorted array:");
for (i = 0; i < array.length; i++)
{
System.out.println(array[i] + " ");
}
System.out.println("Done!");
System.out.println("qcount " + qcount);
}
public static int partition(int stuff[], int a, int z)
{
int left = a, right = z;
int saveStuff;
int pivot = stuff[(a + z) / 2];
while (left <= right)
{
while (stuff[left] < pivot)
{
left++;
}
while (stuff[right] > pivot)
{
right--;
}
if (left <= right)
{
saveStuff = stuff[left];
stuff[left] = stuff[right];
stuff[right] = saveStuff;
left++;
right--;
}
};
return left;
}
public static void quicksort(int stuff[], int a, int z)
{
int index = partition(stuff, a, z);
if (a < index - 1)
{
quicksort(stuff, a, index - 1);
qcount++;
}
if (index < z)
{
quicksort(stuff, index, z);
qcount++;
}
}
}