Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 快速排序的比较总是比数组大小小2,正常吗?_Java_Counter_Quicksort - Fatal编程技术网

Java 快速排序的比较总是比数组大小小2,正常吗?

Java 快速排序的比较总是比数组大小小2,正常吗?,java,counter,quicksort,Java,Counter,Quicksort,毫无疑问,数组大小为5000、4998。[32]=30次比较等 (针对不同条件进行编辑:) 奇数大小的数组也是如此:[35]使计数为33 我可以继续说下去 为什么会这样?Var是qcount 我不相信分区中有任何比较,尽管我可能在这方面错了。我的同学得到的数字有时是我的80倍,所以我们的数字有很大的差异 但我的代码仍然有效。那很好。只是数量大不相同 谢谢你的阅读。所以当我真的不需要写的时候,让我写得更多 public class QuickSortTest { static int num

毫无疑问,数组大小为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++;
      }
  }
公共类QuickSortTest
{
静态int numcalls=0;
静态int qcount=0;
公共静态void main(字符串[]args)
{
Random gen=新的Random();
int[]数组=新int[5000];
int i;
对于(i=0;i如果(左@MattBall),奇怪的是,它是。计算[35]was 33.这很奇怪吗?这看起来确实有点奇怪,因为@MattBall我知道它应该是nlogn的最佳情况,这就是为什么它如此奇怪。那么计数应该去哪里呢?它确实起作用。这让人感到奇怪。
qcount++
应该使用数组元素或影响它们的元素进行每一次公平的比较。例如示例:
while(stuff[left]
while(stuff[right]>pivot)
如果(left@luigimendoza bah)!这是我起初的想法,然后有人告诉我没有。我应该明白,因为这对我来说没有任何意义。它仍然保持在原来的位置,对吗?谢谢,我感觉得到了验证。