import java.util.Random; import java.io.*; /** * Class for testing Sorter with Integer objects. * Demonstrates relation between input size and number of comparisons and * swaps. * (See source code at * SortIntegers.java.) */ public class SortIntegers { /** * Generates array of Integer objects, in the range 0 through upperBound-1. */ private static Integer[] generateIntegers(int howMany, int upperBound) { Random rand = new Random(); Integer[] nums = new Integer[howMany]; for (int i = 0; i < nums.length; ++i) { nums[i] = new Integer(rand.nextInt(upperBound)); } return nums; } /** * Tests sort and search methods with randomly-generated Integer objects. * @param args command-line arguments -- number of Integer objects to * create, (optionally) "print" to print data */ public static void main(String[] args) { // Get how many integers. String usageMsg = "Argument is size of input (integer)"; if (args.length < 1) { System.out.println(usageMsg); System.exit(1); } int howMany = 0; try { howMany = Integer.parseInt(args[0]); } catch (NumberFormatException e) { System.out.println(usageMsg); System.exit(1); } int upperBound = howMany * 10; // Set "print data" switch. boolean printData = (args.length > 1) && (args[1].equals("print")); // Generate data. Integer[] data = generateIntegers(howMany, upperBound); // Make "test names". String testName1 = "randomly-generated integers"; String testName2 = "integers in order"; // Test sorts. Integer[] copyData = null; copyData = (Integer[]) data.clone(); BubbleSort.testSort(testName1, copyData, null); BubbleSort.testSort(testName2, copyData, null); copyData = (Integer[]) data.clone(); SelectionSort.testSort(testName1, copyData, null); SelectionSort.testSort(testName2, copyData, null); copyData = (Integer[]) data.clone(); Quicksort.testSort(testName1, copyData, null); Quicksort.testSort(testName2, copyData, null); copyData = (Integer[]) data.clone(); Mergesort.testSort(testName1, copyData, null); Mergesort.testSort(testName2, copyData, null); // Print data if requested. if (printData) Sorter.printArray("Input data:", data); // Test searches. try { String prompt = "Element to search for:"; BufferedReader rdr = new BufferedReader(new InputStreamReader( System.in)); String input = null; System.out.println(prompt); while ((input = rdr.readLine()) != null) { try { Integer num = new Integer(input); SequentialSearch.testSearch(testName1, data, num, null); SequentialSearch.testSearch(testName2, data, num, null); BinarySearch.testSearch(testName2, data, num, null); } catch (NumberFormatException e) { System.out.println("Input not numeric"); } System.out.println(prompt); } } catch (IOException e) { e.printStackTrace(); } } }