Here is the Java code for insertion sort that produces the desired output:
import java.util.Scanner;
public class InsertionSort {
static int comparisons;
static int swaps;
public static void main(String[] args) {
int[] nums = readNums();
System.out.print("input array: ");
printNums(nums);
insertionSort(nums);
System.out.print("output array: ");
printNums(nums);
System.out.println("comparisons: " + comparisons);
System.out.println("swaps: " + swaps);
}
public static void insertionSort(int[] nums) {
int n = nums.length;
for (int i = 1; i < n; i++) {
int key = nums[i];
int j = i - 1;
while (j >= 0 && nums[j] > key) {
comparisons++;
swaps++;
nums[j + 1] = nums[j];
j--;
}
nums[j + 1] = key;
swaps++;
System.out.print("iteration " + i + ": ");
printNums(nums);
}
}
public static int[] readNums() {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
return nums;
}
public static void printNums(int[] nums) {
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]);
if (i < nums.length - 1) {
System.out.print(" ");
}
}
System.out.println();
}
public static void swap(int[] nums, int j, int k) {
int temp = nums[j];
nums[j] = nums[k];
nums[k] = temp;
swaps++;
}
}
Make sure to copy the code exactly as shown, including the helper methods provided. When you run the program with the input 6 3 2 1 5 9 8, it should produce the output:
input array: 6 3 2 1 5 9 8
iteration 1: 3 6 2 1 5 9 8
iteration 2: 2 3 6 1 5 9 8
iteration 3: 1 2 3 6 5 9 8
iteration 4: 1 2 3 5 6 9 8
iteration 5: 1 2 3 5 6 9 8
iteration 6: 1 2 3 5 6 8 9
output array: 1 2 3 5 6 8 9
comparisons: 7
swaps: 4