快速排序打印比较

quicksort printing comparison

这是我的快速排序分区方法的代码:

public static void quickSort(int[] array) 
{
doQuickSort(array, 0, random1.length - 1);

 }
 private static void doQuickSort(int[] array, int start, int end)
 {
int pivotPoint;

 if(start < end)
 {
   pivotPoint = partition(array, start, end);

    doQuickSort(array,start, pivotPoint - 1);

    doQuickSort(array, pivotPoint +1, end); 
    }


  }
 private static int partition(int[] array, int start, int end)
{
int pivotValue = array[start];
int endOfLeftList = start;
int mid = (start + end)/2;;
int compare = 0;
int swap = 0;

  for(int scan = start + 1; scan <= end; scan++)
  {
   compare++;
   if(array[scan] < pivotValue)
   { 
     swap++;
     endOfLeftList++;
      swap(array, endOfLeftList, scan);
   }
  }

    System.out.println("\nComparisons: " + compare); 
    System.out.println("Swaps: " + swap);

  swap(array, start, endOfLeftList);

  return endOfLeftList;

}

使用随机生成的数组,似乎无论我将打印语句放在哪里,当我调用整个快速排序方法时,它都会像这样连续打印:

 Array Before QuickSort:
 40 27 13 58 42 41 84 4 75 96 
 Comparisons: 1
 Swaps: 1

 Comparisons: 2
 Swaps: 2

 Comparisons: 3
 Swaps: 2

 Comparisons: 4
 Swaps: 2

 Comparisons: 5
 Swaps: 2

 Comparisons: 6
 Swaps: 2

 Comparisons: 7
 Swaps: 3

 Comparisons: 8
 Swaps: 3

 Comparisons: 9
 Swaps: 3

 Comparisons: 1
 Swaps: 0

 Comparisons: 2
 Swaps: 0

 Comparisons: 1
 Swaps: 1

 Comparisons: 1
 Swaps: 1

 Comparisons: 2
 Swaps: 1

 Comparisons: 3
 Swaps: 1

 Comparisons: 4
 Swaps: 1

 Comparisons: 5
 Swaps: 1

 Comparisons: 1
 Swaps: 1

 Comparisons: 2
 Swaps: 2

 Comparisons: 3
 Swaps: 2

 Comparisons: 1
 Swaps: 1

 Array After QuickSort:
 4 13 27 40 41 42 58 75 84 96 

我一定是忽略了什么,但我不确定。我试图让它只打印一次,说明多少次比较,多少次交换。如果需要,我将使用其他信息进行编辑。

发生这种情况是因为对于快速排序,您可能会调用 partition 方法很多时间,直到对数组进行排序。因此,要仅获得一次总计数并在过程完成后,您应该这样做:

使这些变量成为全局变量:

int compare = 0;
int swap = 0;

无论你的主要排序函数在哪里,只要在调用它之后放置这些打印语句:

System.out.println("\nComparisons: " + compare); 
System.out.println("Swaps: " + swap);

编辑

因此,根据您编辑的问题,您应该在 quickSort 方法中使用打印语句,如下所示:

public static void quickSort(int[] array) 
{
    doQuickSort(array, 0, random1.length - 1);
    System.out.println("\nComparisons: " + compare); 
    System.out.println("Swaps: " + swap);
}

或者在你像这样调用 quickSort 之后:

quickSort(someIntArray);
System.out.println("\nComparisons: " + compare); 
System.out.println("Swaps: " + swap);

它每次打印比较的原因是因为每次需要分区时都在使用此函数,对于快速排序来说需要多次。

如果你只想显示结束,那么你应该创建一个单独的函数来打印比较次数

例如:

void printComparisons(int compare, int swap){
     System.out.println("\nComparisons: " + compare); 
     System.out.println("Swaps: " + swap);
}