Advertisement
KingAesthetic

Java Example 3

Aug 12th, 2024 (edited)
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.38 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;
  4.  
  5. // Kaizer here. I implemented and compared different sorting algorithms using 3 main ones. quicksort, mergesort, and heapsort, in terms of performance.
  6. public class SortingComparison {
  7.     // function to print an array
  8.     public static void printArray(List<Integer> arr) {
  9.         for (int num : arr) {
  10.             System.out.print(num + " ");
  11.         }
  12.         System.out.println();
  13.     }
  14.  
  15.     // quicksort implementation
  16.     public static int partition(List<Integer> arr, int low, int high) {
  17.         int pivot = arr.get(high);
  18.         int i = low - 1;
  19.         for (int j = low; j < high; j++) {
  20.             if (arr.get(j) < pivot) {
  21.                 i++;
  22.                 Collections.swap(arr, i, j);
  23.             }
  24.         }
  25.         Collections.swap(arr, i + 1, high);
  26.         return i + 1;
  27.     }
  28.  
  29.     public static void quicksort(List<Integer> arr, int low, int high) {
  30.         if (low < high) {
  31.             int pi = partition(arr, low, high);
  32.             quicksort(arr, low, pi - 1);
  33.             quicksort(arr, pi + 1, high);
  34.         }
  35.     }
  36.  
  37.     // mergesort implementation
  38.     public static void merge(List<Integer> arr, int left, int mid, int right) {
  39.         int n1 = mid - left + 1;
  40.         int n2 = right - mid;
  41.         List<Integer> L = new ArrayList<>(n1);
  42.         List<Integer> R = new ArrayList<>(n2);
  43.  
  44.         for (int i = 0; i < n1; i++)
  45.             L.add(arr.get(left + i));
  46.         for (int j = 0; j < n2; j++)
  47.             R.add(arr.get(mid + 1 + j));
  48.  
  49.         int i = 0, j = 0, k = left;
  50.         while (i < n1 && j < n2) {
  51.             if (L.get(i) <= R.get(j)) {
  52.                 arr.set(k, L.get(i));
  53.                 i++;
  54.             } else {
  55.                 arr.set(k, R.get(j));
  56.                 j++;
  57.             }
  58.             k++;
  59.         }
  60.  
  61.         while (i < n1) {
  62.             arr.set(k, L.get(i));
  63.             i++;
  64.             k++;
  65.         }
  66.  
  67.         while (j < n2) {
  68.             arr.set(k, R.get(j));
  69.             j++;
  70.             k++;
  71.         }
  72.     }
  73.  
  74.     public static void mergesort(List<Integer> arr, int left, int right) {
  75.         if (left < right) {
  76.             int mid = left + (right - left) / 2;
  77.             mergesort(arr, left, mid);
  78.             mergesort(arr, mid + 1, right);
  79.             merge(arr, left, mid, right);
  80.         }
  81.     }
  82.  
  83.     // heapsort implementation
  84.     public static void heapify(List<Integer> arr, int n, int i) {
  85.         int largest = i;
  86.         int left = 2 * i + 1;
  87.         int right = 2 * i + 2;
  88.  
  89.         if (left < n && arr.get(left) > arr.get(largest))
  90.             largest = left;
  91.  
  92.         if (right < n && arr.get(right) > arr.get(largest))
  93.             largest = right;
  94.  
  95.         if (largest != i) {
  96.             Collections.swap(arr, i, largest);
  97.             heapify(arr, n, largest);
  98.         }
  99.     }
  100.  
  101.     public static void heapsort(List<Integer> arr) {
  102.         int n = arr.size();
  103.         for (int i = n / 2 - 1; i >= 0; i--)
  104.             heapify(arr, n, i);
  105.  
  106.         for (int i = n - 1; i > 0; i--) {
  107.             Collections.swap(arr, 0, i);
  108.             heapify(arr, i, 0);
  109.         }
  110.     }
  111.  
  112.     // function to measure and compare sorting times
  113.     public static void compareSorts(List<Integer> arr) {
  114.         List<Integer> arr1 = new ArrayList<>(arr);
  115.         List<Integer> arr2 = new ArrayList<>(arr);
  116.         List<Integer> arr3 = new ArrayList<>(arr);
  117.  
  118.         long start = System.nanoTime();
  119.         quicksort(arr1, 0, arr1.size() - 1);
  120.         long end = System.nanoTime();
  121.         double quicksortTime = (end - start) / 1e9;
  122.         System.out.println("Quicksort time: " + quicksortTime + " seconds");
  123.  
  124.         start = System.nanoTime();
  125.         mergesort(arr2, 0, arr2.size() - 1);
  126.         end = System.nanoTime();
  127.         double mergesortTime = (end - start) / 1e9;
  128.         System.out.println("Mergesort time: " + mergesortTime + " seconds");
  129.  
  130.         start = System.nanoTime();
  131.         heapsort(arr3);
  132.         end = System.nanoTime();
  133.         double heapsortTime = (end - start) / 1e9;
  134.         System.out.println("Heapsort time: " + heapsortTime + " seconds");
  135.     }
  136.  
  137.     public static void main(String[] args) {
  138.         List<Integer> arr = new ArrayList<>(List.of(12, 11, 13, 5, 6, 7));
  139.         System.out.print("Original array: ");
  140.         printArray(arr);
  141.  
  142.         compareSorts(arr);
  143.     }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement