Java Program Use the selection sort to sort n numbers Determ
Java Program:
Use the selection sort to sort n numbers. Determine the value of n for which the elapsed time of your sort is about 10 seconds. Double n (i.e., double the number of numbers to sort) and sort. What is the sorting time for the new value of n? Double n again and determine the sorting time. What happens to the sorting time each time you double n? Estimate how long sorting one billion numbers would take.
Solution
1.For N=175000 Selection sort takes:10 seconds.
2.Doubling N=35000. it takes roughly : 42 seconds
3.Doubling again :N=425000 it takes: 94 seconds
4. For N=1 billion It will give
Exception in thread \"main\" java.lang.OutOfMemoryError: Java heap space
    at Codechef.main(Main.java:40)
===Code====
import java.util.Random;
 import java.util.concurrent.ThreadLocalRandom;
public class MySelectionSort {
public static int[] doSelectionSort(int[] arr) {
       for (int i = 0; i < arr.length - 1; i++) {
            int index = i;
            for (int j = i + 1; j < arr.length; j++)
                if (arr[j] < arr[index])
                    index = j;
           int smallerNumber = arr[index];
            arr[index] = arr[i];
            arr[i] = smallerNumber;
        }
        return arr;
    }
   static void shuffleArray(int[] ar) {
        // If running on Java 6 or older, use `new Random()` on RHS here
        Random rnd = ThreadLocalRandom.current();
        for (int i = ar.length - 1; i > 0; i--) {
            int index = rnd.nextInt(i + 1);
            // Simple swap
            int a = ar[index];
            ar[index] = ar[i];
            ar[i] = a;
        }
    }
   public static void main(String a[]) {
        int[] arr1 = new int[1000000000];
        for (int i = 0; i < 1000000000; i++) {
            arr1[i] = i;
        }
        shuffleArray(arr1);
        long startTime = System.currentTimeMillis();
        int[] arr2 = doSelectionSort(arr1);
        long endTime = System.currentTimeMillis();
        System.out.println(\"Time taken:\" + (endTime - startTime) / 1000+\" seconds\");
        /*for (int i : arr2) {
            System.out.print(i);
            System.out.print(\", \");
        }*/
    }
 }


