In Java write a program to implement Quicksort Also implemen

In Java, write a program to implement Quicksort. Also implement one of the slow sorts (Bubble, Insertion...). After you have tested both, generate a very large array (30,000 or more) of bytes and sort increasingly larger portions of the array (5000, 10000, ..., 30000) with both algorithms. Draw a graph of execution time versus number of elements for both algorithms.

Solution

import java.util.Random;
import java.util.Arrays;
public class Main{

// Bubble sort function
    static void bubbleSort(byte[] arr) {

        int n = arr.length;
        byte temp = 0;
        for(int i=0; i < n; i++){
            for(int j=1; j < (n-i); j++){
                if(arr[j-1] > arr[j]){
                     //swap elements
                     temp = arr[j-1];
                     arr[j-1] = arr[j];
                     arr[j] = temp;
                 }
             }
        }

    }

    static void quickSort(byte[] arr, int low, int high) {
       if (arr == null || arr.length == 0)
           return;

       if (low >= high)
           return;

       // pick the pivot
       int middle = low + (high - low) / 2;
       byte pivot = arr[middle];

       // make left < pivot and right > pivot
       int i = low, j = high;
       while (i <= j) {
           while (arr[i] < pivot) {
               i++;
           }

           while (arr[j] > pivot) {
               j--;
           }

           if (i <= j) {
               byte temp = arr[i];
               arr[i] = arr[j];
               arr[j] = temp;
               i++;
               j--;
           }
       }

       // recursively sort two sub parts
       if (low < j)
           quickSort(arr, low, j);

       if (high > i)
           quickSort(arr, i, high);
   }

    public static void main(String[] args) {

        //creating an array of bytes of length 30000 and filling it with random bytes.
       byte[] b = new byte[30000];
       new Random().nextBytes(b);

        //iterating for different values of array lengths and comparing time.
       for(int j=1; j<=6; j++){
           byte[] b1 = Arrays.copyOfRange(b, 0, 5000*j);
           long startTime = System.currentTimeMillis();
           quickSort(b1, 0, 5000*j-1);
           long endTime   = System.currentTimeMillis();
           long totalTime = endTime - startTime;
           System.out.println(\"Time for array of first \"+5000*j+\" elements for quickSort: \"+totalTime +\" milli seconds.\");
           byte[] b2 = Arrays.copyOfRange(b, 0, 5000*j);
           startTime = System.currentTimeMillis();
           bubbleSort(b2);
           endTime   = System.currentTimeMillis();
           totalTime = endTime - startTime;
           System.out.println(\"Time for array of first \"+5000*j+\" elements for bubbleSort: \"+totalTime+\" milli seconds.\");
       }
    }
}

In Java, write a program to implement Quicksort. Also implement one of the slow sorts (Bubble, Insertion...). After you have tested both, generate a very large
In Java, write a program to implement Quicksort. Also implement one of the slow sorts (Bubble, Insertion...). After you have tested both, generate a very large

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site