Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please teach how to add Heap Sort for below codes, then get results displayed in the same format as the other three sorts import java.util.ArrayList;

Please teach how to add Heap Sort for below codes, then get results displayed in the same format as the other three sorts

import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Random; public class SortTimes { private static final long SAMPLESIZE = 100; private static final long MAXARRAYSIZE = 1000000; private static Random rand = new Random(); public static void main(String[] args) { long insertionSortTime = 0; long mergeSortTime = 0; long quickSortTime = 0; System.out.println("Sorted ascending dataset"); for (int arraysz = 10; arraysz < MAXARRAYSIZE; arraysz *= 10) { System.out.println("\tdataset size == " + arraysz); int[] sortedAsc = getAscendingValues(arraysz); quickSortTime = quickSort(sortedAsc); mergeSortTime = mergeSort(sortedAsc); insertionSortTime = insertionSort(sortedAsc); } System.out.println(""); System.out.println("Sorted descending dataset"); for (int arraysz = 10; arraysz < MAXARRAYSIZE; arraysz *= 10) { System.out.println("\tdataset size == " + arraysz); int[] sortedAsc = getDescendingValues(arraysz); quickSortTime = quickSort(sortedAsc); mergeSortTime = mergeSort(sortedAsc); insertionSortTime = insertionSort(sortedAsc); } System.out.println(""); System.out.println("Randomized dataset"); for (int arraysz = 10; arraysz < MAXARRAYSIZE; arraysz *= 10) { System.out.println("\tdataset size == " + arraysz); int[] randomNumbers = getRandomizedValues(arraysz); quickSortTime = quickSort(randomNumbers); mergeSortTime = mergeSort(randomNumbers); insertionSortTime = insertionSort(randomNumbers); } } private static int[] getAscendingValues(int n) { int[] numbers = new int[n]; for (int i = 0; i < n; i++) { numbers[i] = i; } return numbers; } private static int[] getDescendingValues(int n) { int[] numbers = new int[n]; for (int i = 0, j = n - 1; i < n; i++, j--) { numbers[i] = j; } return numbers; } private static int[] getRandomizedValues(int n) { Random rand = new Random(); int[] rtnAry = getAscendingValues(n); for (int i = n - 1; i > 1; i--) { int r = rand.nextInt(i); int tmp = rtnAry[i]; rtnAry[i] = rtnAry[r]; rtnAry[r] = tmp; } return rtnAry; } private static long insertionSort(int[] src) { int[] cpy = new int[src.length]; long startTime = 0; long endTime = 0; System.arraycopy(src, 0, cpy, 0, src.length); startTime = System.nanoTime(); InsertionSort.sort(cpy); endTime = System.nanoTime(); System.out.println("\t\tInsertion Sort took " + (endTime - startTime)); return (endTime - startTime); } private static long mergeSort(int[] src) { int[] cpy = new int[src.length]; long startTime = 0; long endTime = 0; System.arraycopy(src, 0, cpy, 0, src.length); startTime = System.nanoTime(); MergeSort.sort(cpy); endTime = System.nanoTime(); System.out.println("\t\tMerge Sort took " + (endTime - startTime)); return (endTime - startTime); } private static long quickSort(int[] src) { int[] cpy = new int[src.length]; long startTime = 0; long endTime = 0; System.arraycopy(src, 0, cpy, 0, src.length); startTime = System.nanoTime(); QuickSort.sort(cpy); endTime = System.nanoTime(); System.out.println("\t\tQuick Sort took " + (endTime - startTime)); return (endTime - startTime); } } class InsertionSort { public static int[] sort(int[] numbers) { for (int i = 1; i < numbers.length; ++i) { // Insert numbers[i] into sorted part, stopping // once numbers[i] is in the correct position for (int j = i; j > 0 && numbers[j] < numbers[j - 1]; j--) { // Swap numbers[j] and numbers[j - 1] int tmp = numbers[j]; numbers[j] = numbers[j - 1]; numbers[j - 1] = tmp; } } return numbers; } } class MergeSort { private static int[] merge(int[] numbers, int i, int j, int k) { int mergedSize = k - i + 1; // Size of merged partition int mergePos = 0; // Position to insert merged number int[] mergedNumbers = new int[mergedSize]; // Dynamically allocates temporary array // for merged numbers int leftPos = i; // Initialize left partition position int rightPos = j + 1; // Initialize right partition position // Add smallest element from left or right partition to merged numbers while (leftPos <= j && rightPos <= k) { if (numbers[leftPos] <= numbers[rightPos]) { mergedNumbers[mergePos] = numbers[leftPos]; ++leftPos; } else { mergedNumbers[mergePos] = numbers[rightPos]; ++rightPos; } ++mergePos; } // If left partition is not empty, add remaining elements to merged numbers while (leftPos <= j) { mergedNumbers[mergePos] = numbers[leftPos]; ++leftPos; ++mergePos; } // If right partition is not empty, add remaining elements to merged numbers while (rightPos <= k) { mergedNumbers[mergePos] = numbers[rightPos]; ++rightPos; ++mergePos; } // Copy merge number back to numbers for (mergePos = 0; mergePos < mergedSize; ++mergePos) { numbers[i + mergePos] = mergedNumbers[mergePos]; } return numbers; } private static int[] sort(int[] numbers, int i, int k) { int j = 0; if (i < k) { j = (i + k) / 2; // Find the midpoint in the partition // Recursively sort left and right partitions sort(numbers, i, j); sort(numbers, j + 1, k); // Merge left and right partition in sorted order merge(numbers, i, j, k); } return numbers; } public static int[] sort(int[] numbers) { return sort(numbers, 0, numbers.length - 1); } } class QuickSort { private static int partition(int[] numbers, int i, int k) { int l = 0; int h = 0; int midpoint = 0; int pivot = 0; int temp = 0; boolean done = false; // Pick middle element as pivot midpoint = i + (k - i) / 2; pivot = numbers[midpoint]; l = i; h = k; while (!done) { // Increment l while numbers[l] < pivot while (numbers[l] < pivot) { ++l; } // Decrement h while pivot < numbers[h] while (pivot < numbers[h]) { --h; } // If there are zero or one elements remaining, // all numbers are partitioned. Return h if (l >= h) { done = true; } else { // Swap numbers[l] and numbers[h], // update l and h temp = numbers[l]; numbers[l] = numbers[h]; numbers[h] = temp; ++l; --h; } } return h; } public static int[] sort(int[] numbers) { sort(numbers, 0, numbers.length - 1); return numbers; } private static int[] sort(int[] numbers, int i, int k) { int j = 0; // Base case: If there are 1 or zero elements to sort, // partition is already sorted if (i >= k) { return numbers; } // Partition the data within the array. Value j returned // from partitioning is location of last element in low partition. j = partition(numbers, i, k); // Recursively sort low partition (i to j) and // high partition (j + 1 to k) sort(numbers, i, j); sort(numbers, j + 1, k); return numbers; } }

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Introduction to Wireless and Mobile Systems

Authors: Dharma P. Agrawal, Qing An Zeng

4th edition

1305087135, 978-1305087132, 9781305259621, 1305259629, 9781305537910 , 978-130508713

More Books

Students also viewed these Programming questions

Question

6. What type of syndicate data will be useful to Wendys?

Answered: 1 week ago

Question

To find integral of sin(logx) .

Answered: 1 week ago