Advertisement
Aldin-SXR

QuickSort.java

Apr 8th, 2020
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.51 KB | None | 0 0
  1. package ds.quick.sort;
  2.  
  3. import java.util.Random;
  4.  
  5. public class QuickSort extends AbstractSort {
  6.    
  7.     /* Quick sort algorithm (public invocation) */
  8.     public static void sort(int[] elements) {
  9.         shuffle(elements);                              // 1
  10.         sort(elements, 0, elements.length - 1);         // 2
  11.     }
  12.    
  13.     /* Knuth shuffle (performance guarantee) */
  14.     private static void shuffle(int[] elements) {
  15.         Random rand = new Random();                             // 1
  16.         for (int i = 0; i < elements.length; i++) {             // 2
  17.             int r = i + rand.nextInt(elements.length - i);      // 2
  18.             swap(elements, i, r);                               // 3
  19.         }
  20.     }
  21.    
  22.     /* Recursive quick sort logic */
  23.     private static void sort(int[] elements, int low, int high) {
  24.         if (high <= low) {                              // 1
  25.             return;                                     // 1
  26.         }
  27.         int j = partition(elements, low, high);         // 2
  28.         sort(elements, low, j - 1);                     // 3
  29.         sort(elements, j + 1, high);                    // 3
  30.     }
  31.    
  32.     /* Partition an array and return the pivot index */
  33.     private static int partition(int[] elements, int low, int high) {
  34.         int i = low;                                            // 1
  35.         int j = high + 1;                                       // 1
  36.         while (true) {                                          // 2
  37.             while (less(elements[++i], elements[low])) {        // 3
  38.                 if (i == high) {                                // 3
  39.                     break;                                      // 3
  40.                 }
  41.             }
  42.             while (less(elements[low], elements[--j])) {        // 4
  43.                 if (j == low) {                                 // 4
  44.                     break;                                      // 4
  45.                 }
  46.             }
  47.             if (i >= j) {                                       // 5
  48.                 break;                                          // 5
  49.             }
  50.             swap(elements, i, j);                               // 6
  51.         }
  52.         swap(elements, low, j);                                 // 7
  53.         return j;                                               // 7
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement