Mega Code Archive

 
Categories / Java Tutorial / Collections
 

Quick sort

public class MainClass {   public static void main(String[] args) {     int[] intArray = { 1, 9, 2, 8, 3, 7, 4, 6, 5 };     for (int i : intArray) {       System.out.println(i);     }     quickSort(intArray);     for (int i : intArray) {       System.out.println(i);     }   }   public static void quickSort(int[] intArray) {     recQuickSort(intArray, 0, intArray.length - 1);     insertionSort(intArray, 0, intArray.length - 1);   }   public static void recQuickSort(int[] intArray, int left, int right) {     int size = right - left + 1;     if (size < 10)       insertionSort(intArray, left, right);     else {       double median = medianOf3(intArray, left, right);       int partition = partitionIt(intArray, left, right, median);       recQuickSort(intArray, left, partition - 1);       recQuickSort(intArray, partition + 1, right);     }   }   public static double medianOf3(int[] intArray, int left, int right) {     int center = (left + right) / 2;     if (intArray[left] > intArray[center])       swap(intArray, left, center);     if (intArray[left] > intArray[right])       swap(intArray, left, right);     if (intArray[center] > intArray[right])       swap(intArray, center, right);     swap(intArray, center, right - 1);     return intArray[right - 1];   }   public static void swap(int[] intArray, int dex1, int dex2) {     int temp = intArray[dex1];     intArray[dex1] = intArray[dex2];     intArray[dex2] = temp;   }   public static int partitionIt(int[] intArray, int left, int right, double pivot) {     int leftPtr = left;     int rightPtr = right - 1;     while (true) {       while (intArray[++leftPtr] < pivot)         ;       while (intArray[--rightPtr] > pivot)         ;       if (leftPtr >= rightPtr)         break;       else         swap(intArray, leftPtr, rightPtr);     }     swap(intArray, leftPtr, right - 1);     return leftPtr;   }   public static void insertionSort(int[] intArray, int left, int right) {     int in, out;     for (out = left + 1; out <= right; out++) {       int temp = intArray[out];       in = out;       while (in > left && intArray[in - 1] >= temp) {         intArray[in] = intArray[in - 1];         --in;       }       intArray[in] = temp;     }   } } 1 9 2 8 3 7 4 6 5 1 2 3 4 5 6 7 8 9