Question 1: The following algorithm takes an unsorted array of integer numbers as input and sorts it in descending order, by repeatedly doing the following: • first, it searches in the whole array for the greatest element. • it then puts this element to the beginning of the array. • then, it searches the whole array excluding the first element for the greatest value and puts it to the second position. Implement the algorithm according to two different strategies: A. By using the method shiftRight(int[] A, int i, int j): if the maximum element is found in position j and needs to be put into position i, then (i) shift A to the right, starting from position i, while remembering the element in position j that will be overridden; (ii) copy the remembered element to position i. B. By using the method swap(int[] A, int i, int j): if the maximum element is found in position i and needs to be put into position j, then use swap to exchange the element in position i with the element in position j.
Question 1: The following
• first, it searches in the whole array for the greatest element.
• it then puts this element to the beginning of the array.
• then, it searches the whole array excluding the first element for the greatest value and puts it to the second position.
Implement the algorithm according to two different strategies:
A. By using the method shiftRight(int[] A, int i, int j): if the maximum element is found in position j and needs to be put into position i, then (i) shift A to the right, starting from position i, while remembering the element in position j that will be overridden; (ii) copy the remembered element to position i.
B. By using the method swap(int[] A, int i, int j): if the maximum element is found in position i and needs to be put into position j, then use swap to exchange the element in position i with the element in position j.
Question 2: Find out which of the two algorithms is faster. Is there an array size for which the running times crosse over?
(A size N would be such a cross-over point if for inputs of size less than N, the running times of one algorithm are better, while for inputs of size greater than N, the running times of the other algorithm are better.)
To perform your measurements, write a test class that
1. creates random arrays of size n = 10, 100, 1000, etc., and
2. for each array created, sorts it using the two implementations of the algorithm and measures the running times.
• to measure the running time use the Java method System.nanoTime()
in the following way:
long startTime = System.nanoTime();
... the code being measured ...
long estimatedTime = System.nanoTime()-startTime;
Trending now
This is a popular solution!
Step by step
Solved in 2 steps with 1 images