快速排序的比较总是比阵列大小少2,正常吗?

时间:2013-11-08 20:44:28

标签: java counter quicksort

没有失败,数组大小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++;
      }
  }

}

0 个答案:

没有答案