asked 45.7k views
4 votes
Insertion sort in java code. I need a modified code of the code given, output need to print exact. Make sure to give explanation and provide output. My output is printing the wrong comparison. My output is printing a comparisons: 4 and comparsions: 9, What I need is a java code thats output to print a comparisons: 7.

The program has four steps:

Read the size of an integer array, followed by the elements of the array (no duplicates).

Output the array.

Perform an insertion sort on the array.

Output the number of comparisons and swaps performed.

main() performs steps 1 and 2.

Implement step 3 based on the insertion sort algorithm in the book. Modify insertionSort() to:

Count the number of comparisons performed.

Count the number of swaps performed.

Output the array during each iteration of the outside loop.

Complete main() to perform step 4, according to the format shown in the example below.

Hints: In order to count comparisons and swaps, modify the while loop in insertionSort(). Use static variables for comparisons and swaps.

The program provides three helper methods:

// Read and return an array of integers.
// The first integer read is number of integers that follow.
int[] readNums()

// Print the numbers in the array, separated by spaces
// (No space or newline before the first number or after the last.)
void printNums(int[] nums)

// Exchange nums[j] and nums[k].
void swap(int[] nums, int j, int k)


When the input is:

6 3 2 1 5 9 8


the output is:

3 2 1 5 9 8

2 3 1 5 9 8
1 2 3 5 9 8
1 2 3 5 9 8
1 2 3 5 9 8
1 2 3 5 8 9

comparisons: 7
swaps: 4

Put your java code into the java program,putting in the to do list.

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

/* TODO: Count comparisons and swaps. Output the array at the end of each iteration. */

public static void insertionSort(int[] numbers) {

int i;

int j;



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);

--j;

}

}

}



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();



// step 4

/* TODO: Output the number of comparisons and swaps performed*/

}

}

1 Answer

3 votes

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.

answered
User Frank Bryce
by
8.3k points