计算插入排序中的比较

问题描述 投票:0回答:0

全面披露,是的,这是作业。我的任务是计算数字数组插入排序中的比较和交换。使用给出的代码外壳,我可以很容易地知道交换发生在哪里,但我真的无法确定这段代码中发生比较的位置,因此也无法确定何时增加比较计数器。

public static void insertionSort(int[] numbers) {
      int i;
      int j;
      int comp = 0;
      int swaps = 0;

      for (i = 1; i < numbers.length; ++i) {
         j = i;
         
         // Insert numbers[i] into sorted part,
         // stopping once numbers[i] is in correct position
         while (j > 0 && numbers[j] < numbers[j - 1]) {
            // Swap numbers[j] and numbers[j - 1]
            swap(numbers, j, j  - 1);
            swaps += 1;
            --j;
         }
         printNums(numbers);
      }
      System.out.println("comparisons: " + comp);
      System.out.println("swaps: " + swaps);
   }

   private static void swap(int[] nums, int j, int k) {
      int temp = nums[j];
      nums[j] = nums[k];
      nums[k] = temp;
   }

我试过在 while 循环之前递增 comp,但这似乎不起作用。在数组 3 2 1 5 9 8 中,按照说明应该递增 7,却递增了 5 次。任何帮助将不胜感激。

java insertion-sort
© www.soinside.com 2019 - 2024. All rights reserved.