Here is my program, what I need it to do is to generate the corresponding array
ID: 3739360 • Letter: H
Question
Here is my program, what I need it to do is to
generate the corresponding array of objects, prompt for the sort field , perform the sorts, and show the run times for each algorithm (visible on the same screen). Also provide an option to show the (aligned) unsorted and/or sorted versions of the array contents at the user's discretion after each individual sort completes. Let the user perform the task as many times as desired without exiting the program. In addition to the standard documentation and submission requirements, submit a table that summarizes the results of running your algorithm on various values of N along with your observations about the actual relative performance of your algorithms.
import java.util.Random
/* This function takes last element as pivot,
places the pivot element at its correct
position in sorted array, and places all
smaller (smaller than pivot) to left of
pivot and all greater elements to right
of pivot */
int partition(int arr[], int low, int high)
{
int pivot = arr[high];
int i = (low-1); // index of smaller element
for (int j=low; j<high; j++)
{
// If current element is smaller than or
// equal to pivot
if (arr[j] <= pivot)
{
i++;
// swap arr[i] and arr[j]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// swap arr[i+1] and arr[high] (or pivot)
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return i+1;
}
/* The main function that implements QuickSort()
* arr[] --> Array to be sorted,
* low --> Starting index,
* high --> Ending index
*/
void quickSort(int arr[], int low, int high)
{
if (low < high)
{
/* pi is partitioning index, arr[pi] is
now at right place */
int pi = partition(arr, low, high);
// Recursively sort elements before
// partition and after partition
quickSort(arr, low, pi-1);
quickSort(arr, pi+1, high);
}
}
// Merges two subarrays of arr[].
// First subarray is arr[l..m]
// Second subarray is arr[m+1..r]
void merge(int arr[], int l, int m, int r)
{
// Find sizes of two subarrays to be merged
int n1 = m - l + 1;
int n2 = r - m;
/* Create temp arrays */
int L[] = new int [n1];
int R[] = new int [n2];
/*Copy data to temp arrays*/
for (int i=0; i<n1; ++i)
L[i] = arr[l + i];
for (int j=0; j<n2; ++j)
R[j] = arr[m + 1+ j];
/* Merge the temp arrays */
// Initial indexes of first and second subarrays
int i = 0, j = 0;
// Initial index of merged subarry array
int k = l;
while (i < n1 && j < n2)
{
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
/* Copy remaining elements of L[] if any */
while (i < n1)
{
arr[k] = L[i];
i++;
k++;
}
/* Copy remaining elements of R[] if any */
while (j < n2)
{
arr[k] = R[j];
j++;
k++;
}
}
// Main function that sorts arr[l..r] using
// merge()
void mergeSort(int arr[], int l, int r)
{
if (l < r)
{
// Find the middle point
int m = (l+r)/2;
// Sort first and second halves
mergeSort(arr, l, m);
mergeSort(arr , m+1, r);
// Merge the sorted halves
merge(arr, l, m, r);
}
}
void bubbleSort(int arr[]) {
int n = arr.length;
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
{
// swap temp and arr[i]
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
void selectionSort(int arr[]) {
int n = arr.length;
// One by one move boundary of unsorted subarray
for (int i = 0; i < n-1; i++)
{
// Find the minimum element in unsorted array
int min_idx = i;
for (int j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
// Swap the found minimum element with the first
// element
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
void insertionSort(int arr[]) {
int n = arr.length;
for (int i=1; i<n; ++i)
{
int key = arr[i];
int j = i-1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j>=0 && arr[j] > key)
{
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key;
}
}
/* function to sort arr using shellSort */
int shellSort(int arr[]) {
int n = arr.length;
// Start with a big gap, then reduce the gap
for (int gap = n/2; gap > 0; gap /= 2)
{
// Do a gapped insertion sort for this gap size.
// The first gap elements a[0..gap-1] are already
// in gapped order keep adding one more element
// until the entire array is gap sorted
for (int i = gap; i < n; i += 1)
{
// add a[i] to the elements that have been gap
// sorted save a[i] in temp and make a hole at
// position i
int temp = arr[i];
// shift earlier gap-sorted elements up until
// the correct location for a[i] is found
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
arr[j] = arr[j - gap];
// put temp (the original a[i]) in its correct
// location
arr[j] = temp;
}
}
return 0;
}
/* A utility function to print array of size n */
static void printArray(int arr[]) {
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i]+" ");
System.out.println();
}
public static void main(String args[]) {
Random rand = new Random();
int size = 10000;
int arr[] = new int[size];
int temp[] = arr;
// place random elements into arr
for(int i=0; i<size; i++)
arr[i] = rand.nextInt(100);
long startTime, endTime;
SortComparisons o = new SortComparisons();
// Performance of Bubble Sort
startTime = System.currentTimeMillis();
o.bubbleSort(arr);
endTime = System.currentTimeMillis();
System.out.println("Bubble Sort took " + (endTime - startTime) + " milliseconds ");
// Performance of Insertions Sort
arr = temp;
startTime = System.currentTimeMillis();
o.insertionSort(arr);
endTime = System.currentTimeMillis();
System.out.println("Insertion Sort took " + (endTime - startTime) + " milliseconds ");
// Performance of Selection Sort
arr = temp;
startTime = System.currentTimeMillis();
o.selectionSort(arr);
endTime = System.currentTimeMillis();
System.out.println("Selection Sort took " + (endTime - startTime) + " milliseconds ");
// Performance of Shell Sort
arr = temp;
startTime = System.currentTimeMillis();
o.shellSort(arr);
endTime = System.currentTimeMillis();
System.out.println("Shell sort took " + (endTime - startTime) + " milliseconds ");
// Performance of Quick Sort
arr = temp;
startTime = System.currentTimeMillis();
o.quickSort(arr, 0, size-1);
endTime = System.currentTimeMillis();
System.out.println("Quick Sort took " + (endTime - startTime) + " milliseconds ");
// Performance of Merge Sort
arr = temp;
startTime = System.currentTimeMillis();
o.mergeSort(arr, 0, size-1);
endTime = System.currentTimeMillis();
System.out.println("Merge Sort took " + (endTime - startTime) + " milliseconds ");
}
}
Explanation / Answer
Please find the program Below. Following table is showing the running time for different input size (N).
Running time comparisons :
Insertion
(ms)
Selection
(ms)
Shell
(ms)
Quick
(ms)
Merge
(ms)
JAVA CLASS :
==========
EXECUTION OUTPUT :
=================
Starting test again *************
Bubble Sort took 0 milliseconds
QUESTION : Want to see the unsorted & sorted elements (y/n) ? y
Unsorted elements = [3, 35, 10, 80, 77, 37, 35, 50, 98, 7]
Sorted elements = [3, 7, 10, 35, 35, 37, 50, 77, 80, 98]
Insertion Sort took 0 milliseconds
QUESTION : Want to see the unsorted & sorted elements (y/n) ? n
Selection Sort took 0 milliseconds
QUESTION : Want to see the unsorted & sorted elements (y/n) ? n
Shell sort took 0 milliseconds
QUESTION : Want to see the unsorted & sorted elements (y/n) ? n
Quick Sort took 0 milliseconds
QUESTION : Want to see the unsorted & sorted elements (y/n) ? n
Merge Sort took 0 milliseconds
QUESTION : Want to see the unsorted & sorted elements (y/n) ? n
QUESTION : Test again (y/n): y
Insertion
(ms)
Selection
(ms)
Shell
(ms)
Quick
(ms)
Merge
(ms)
Observations10000156 17 79 6 4 4 Bubble Sort, Insertion Sort and Selection Sort starts performing very slow when the input size increases whereas the execution time for Shell sort , quick sort and merger sort doesn't increase like the other three algorithms. This is because the best case comlexity of shell/quick and merge shorts are - O(n log n),
500004968 262 1362 8 21 9
10000020234 1059 5519 16 80 25
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.