In 2004, a research paper titled "A Multi-National Study of Reading and Tracing Skills in Novice Programmers" was published which reported the results of a standardized written multiple-choice test given to several hundred university and college students who had just completed a first-year course in programming. This is essentially Question 8 from the test (the differences being you have to generate a random list of integers, you have a computer to test your solution, and you don't have the multiple choices).
If any two numbers in a list of integers (not necessarily consecutive numbers in the list) are out of order, then that is called an inversion. For example, consider the list x that contains the following six integers:
4 5 6 2 1 3
There are 10 inversions in the list:
x.get(0) == 4 > x.get(3) == 2 x.get(0) == 4 > x.get(4) == 1 x.get(0) == 4 > x.get(5) == 3 x.get(1) == 5 > x.get(3) == 2 x.get(1) == 5 > x.get(4) == 1 x.get(1) == 5 > x.get(5) == 3 x.get(2) == 6 > x.get(3) == 2 x.get(2) == 6 > x.get(4) == 1 x.get(2) == 6 > x.get(5) == 3 x.get(3) == 2 > x.get(4) == 1
Cut-and-paste the incomplete program given below into your editor, and fill in the for loops (shown in red) to complete a program that creates a list of N random integers and counts the number of inversions in the list (the first loop is identical to the first loop you wrote for Part 1 of the lab).
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Random;
public class InversionCount
{
public static void main(String[] args)
{
PrintStream out = System.out;
// N is the number of elements in the initial list
final int N = Integer.parseInt(args[0]);
// the list
ArrayList<Integer> list = new ArrayList<Integer>();
// add N random integers between 1 and MAX to the list
final int MAX = 100;
Random rng = new Random();
for ()
{
}
out.println(list);
int inversionCount = 0;
for ()
{
for ()
{
}
}
out.println(inversionCount + " inversions");
}
}
Submit your program using the command:
submit 1020 L06 InversionCount.java