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