Answer
import java.util.Scanner;
public class LabProgram
{
// Read and return an array of integers.
// The first integer read is number of integers that follow.
private static int[] readNums() {
Scanner scnr = new Scanner(System.in);
int size = scnr.nextInt(); // Read array size
int[] numbers = new int[size]; // Create array
for (int i = 0; i < size; ++i) { // Read the numbers
numbers[i] = scnr.nextInt();
}
return numbers;
}
// Print the numbers in the array, separated by spaces
// (No space or newline before the first number or after the last.)
private 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();
}
// Exchange nums[j] and nums[k].
private static void swap(int[] nums, int j, int k) {
int temp = nums[j];
nums[j] = nums[k];
nums[k] = temp;
}
// Sort numbers
public static void insertionSort(int[] numbers) {
int i, j, temp;
int comparisons = 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]
temp = numbers[j];
numbers[j] = numbers[j - 1];
numbers[j - 1] = temp;
--j;
comparisons++;
swaps++;
}
comparisons++;
printNums(numbers);
}
System.out.println("comparisons: " + comparisons);
System.out.println("swaps: " + swaps);
}
public static void main(String[] args) {
// Step 1: Read numbers into an array
int[] numbers = readNums();
// Step 2: Output the numbers array
printNums(numbers);
System.out.println();
// Step 3: Sort the numbers array
insertionSort(numbers);
System.out.println();
}
Explanation:
The code you provided is implementing an insertion sort algorithm on an integer array. The program reads the size of the integer array and its elements, then outputs the array before sorting it. The insertionSort() method performs the sorting and counts the number of comparisons and swaps performed during the sorting process. The main() method calls the insertionSort() method and outputs the sorted array and the number of comparisons and swaps made during the sorting process.