import java.io.*; import java.util.*; /** * StackSort is a program that will use
ID: 3910269 • Letter: I
Question
import java.io.*;
import java.util.*;
/**
* StackSort is a program that will use two stacks to sort an array of
integer values.
*
* @author Charles Hoot
* @version 4.0
*/
public class StackSort {
public static void main(String args[]) {
int data[] = null;
int result[] = null;
Scanner input;
input = new Scanner(System.in);
System.out.println("This program sorts an array of integer
values.");
// Create an empty array of integers
data = createArray(0, 1, 1);
System.out.println("Original array is: " +
representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " +
representationOfArray(result));
System.out.println();
// Create an array with one integer
data = createArray(1, 0, 9);
System.out.println("Original array is: " +
representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " +
representationOfArray(result));
System.out.println();
// Create an array with two integers
data = createArray(2, 0, 9);
System.out.println("Original array is: " +
representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " +
representationOfArray(result));
System.out.println();
// Create an array with 10 integers
data = createArray(10, 0, 9999);
System.out.println("Original array is: " +
representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " +
representationOfArray(result));
System.out.println();
// Create an array with 20 integers
data = createArray(20, 0, 9);
System.out.println("Original array is: " +
representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " +
representationOfArray(result));
System.out.println();
System.out.println("Please enter the number of values to sort");
int size = getInt(" It should be an integer value greater than
or equal to 1.");
// Create an array of the given size
data = createArray(size, 0, 99);
System.out.println("Original array is: " +
representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " +
representationOfArray(result));
System.out.println();
}
/**
* Use two stacks to sort the data in an array
*
* @param data An array of integer values to be sorted.
* @return An array of sorted integers.
*/
private static int[] doStackSort(int data[]) {
int result[] = new int[data.length];
// ADD CODE HERE TO SORT THE ARRAY USING TWO STACKS
return result;
}
/**
* Load an array with data values
*
* @param size The number of data values to generate and place in the
array.
* @param min The minimum value to generate.
* @param max The maximum value to generate.
* @return An array of randomly generated integers.
*/
private static int[] createArray(int size, int min, int max) {
Random generator = new Random();
// If we get a negative size, just make the size 1
if (size < 0) {
size = 1;
}
// We need max > min for the random number generator to be happy
if (max <= min) {
max = min + 1;
}
int[] data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = min + generator.nextInt(max - min);
}
return data;
}
/**
* Create a string with the data values from an array
*
* @param data An array of integer values.
* @return A string representation of the array.
*/
private static String representationOfArray(int data[]) {
String result = new String("< ");
for (int i = 0; i < data.length; i++) {
result += data[i] + " ";
}
result += ">";
return result;
}
/**
* Get an integer value
*
* @return An integer.
*/
private static int getInt(String rangePrompt) {
Scanner input;
int result = 10; //default value is 10
try {
input = new Scanner(System.in);
System.out.println(rangePrompt);
result = input.nextInt();
} catch (NumberFormatException e) {
System.out.println("Could not convert input to an integer");
System.out.println(e.getMessage());
System.out.println("Will use 10 as the default value");
} catch (Exception e) {
System.out.println("There was an error with System.in");
System.out.println(e.getMessage());
System.out.println("Will use 10 as the default value");
}
return result;
}
}
Explanation / Answer
Given below is the completed code for the question.
To indent code in eclipse , select code by pressing ctrl+a and then indent using ctrl+i
Please do rate the answer if it was helpful. Thank you
import java.io.*;
import java.util.*;
/**
*
* StackSort is a program that will use two stacks to sort an array of
*
* integer values.
*
*
*
* @author Charles Hoot
*
* @version 4.0
*
*/
public class StackSort {
public static void main(String args[]) {
int data[] = null;
int result[] = null;
Scanner input;
input = new Scanner(System.in);
System.out.println("This program sorts an array of integer values.");
// Create an empty array of integers
data = createArray(0, 1, 1);
System.out.println("Original array is: " + representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " + representationOfArray(result));
System.out.println();
// Create an array with one integer
data = createArray(1, 0, 9);
System.out.println("Original array is: " + representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " + representationOfArray(result));
System.out.println();
// Create an array with two integers
data = createArray(2, 0, 9);
System.out.println("Original array is: " + representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " + representationOfArray(result));
System.out.println();
// Create an array with 10 integers
data = createArray(10, 0, 9999);
System.out.println("Original array is: " + representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " +representationOfArray(result));
System.out.println();
// Create an array with 20 integers
data = createArray(20, 0, 9);
System.out.println("Original array is: " + representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " + representationOfArray(result));
System.out.println();
System.out.println("Please enter the number of values to sort");
int size = getInt("It should be an integer value greater than or equal to 1.");
// Create an array of the given size
data = createArray(size, 0, 99);
System.out.println("Original array is: " + representationOfArray(data));
result = doStackSort(data);
System.out.println("Sorted array is: " + representationOfArray(result));
System.out.println();
}
/**
*
* Use two stacks to sort the data in an array
*
*
*
* @param data
* An array of integer values to be sorted.
*
* @return An array of sorted integers.
*
*/
private static int[] doStackSort(int data[]) {
int result[] = new int[data.length];
// ADD CODE HERE TO SORT THE ARRAY USING TWO STACKS
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
for(int i = 0; i < data.length; i++)
{
//if stack1 is not empty and as long as the current data element is smaller than top of stack1,
//pop all elements from stack1 and add to stack2
while(!stack1.isEmpty() && data[i] < stack1.peek())
{
stack2.push(stack1.pop());
}
stack1.push(data[i]); //push the current element onto stack1
//push all elements from stack2 into stack1
while(!stack2.isEmpty())
{
stack1.push(stack2.pop());
}
}
//now the elements in stack1 are all in ascending order... fill these into result array
for(int i = data.length-1; i >= 0; i--)
result[i] = stack1.pop();
return result;
}
/**
*
* Load an array with data values
*
*
*
* @param size
* The number of data values to generate and place in the
*
* array.
*
* @param min
* The minimum value to generate.
*
* @param max
* The maximum value to generate.
*
* @return An array of randomly generated integers.
*
*/
private static int[] createArray(int size, int min, int max) {
Random generator = new Random();
// If we get a negative size, just make the size 1
if (size < 0) {
size = 1;
}
// We need max > min for the random number generator to be happy
if (max <= min) {
max = min + 1;
}
int[] data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = min + generator.nextInt(max - min);
}
return data;
}
/**
*
* Create a string with the data values from an array
*
*
*
* @param data
* An array of integer values.
*
* @return A string representation of the array.
*
*/
private static String representationOfArray(int data[]) {
String result = new String("< ");
for (int i = 0; i < data.length; i++) {
result += data[i] + " ";
}
result += ">";
return result;
}
/**
*
* Get an integer value
*
*
*
* @return An integer.
*
*/
private static int getInt(String rangePrompt) {
Scanner input;
int result = 10; // default value is 10
try {
input = new Scanner(System.in);
System.out.println(rangePrompt);
result = input.nextInt();
} catch (NumberFormatException e) {
System.out.println("Could not convert input to an integer");
System.out.println(e.getMessage());
System.out.println("Will use 10 as the default value");
} catch (Exception e) {
System.out.println("There was an error with System.in");
System.out.println(e.getMessage());
System.out.println("Will use 10 as the default value");
}
return result;
}
}
output
====
This program sorts an array of integer values.
Original array is: < >
Sorted array is: < >
Original array is: < 1 >
Sorted array is: < 1 >
Original array is: < 0 3 >
Sorted array is: < 0 3 >
Original array is: < 975 6437 6777 4913 8446 7581 6917 4527 1489 4835 >
Sorted array is: < 975 1489 4527 4835 4913 6437 6777 6917 7581 8446 >
Original array is: < 4 5 4 2 7 1 3 6 6 7 4 3 3 6 0 4 7 3 3 6 >
Sorted array is: < 0 1 2 3 3 3 3 3 4 4 4 4 5 6 6 6 6 7 7 7 >
Please enter the number of values to sort
It should be an integer value greater than or equal to 1.
5
Original array is: < 61 92 32 93 4 >
Sorted array is: < 4 32 61 92 93 >
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.