Start Typing !!! type the highlighted character. You can't scroll once you start typing.
filename

QuickSort.java

package Sorts;

import static Sorts.SortUtils.*;

/**

* @author Varun Upadhyay (https://github.com/varunu28)

* @author Podshivalov Nikita (https://github.com/nikitap492)

* @see SortAlgorithm

*/

class QuickSort implements SortAlgorithm {

/**

* This method implements the Generic Quick Sort

*

* @param array The array to be sorted

* Sorts the array in increasing order

**/

@Override

public <T extends Comparable<T>> T[] sort(T[] array) {

doSort(array, 0, array.length - 1);

return array;

}

/**

* The sorting process

*

* @param left The first index of an array

* @param right The last index of an array

* @param array The array to be sorted

**/

private static <T extends Comparable<T>> void doSort(T[] array, int left, int right) {

if (left < right) {

int pivot = randomPartition(array, left, right);

doSort(array, left, pivot - 1);

doSort(array, pivot, right);

}

}

/**

* Ramdomize the array to avoid the basically ordered sequences

*

* @param array The array to be sorted

* @param left The first index of an array

* @param right The last index of an array

* @return the partition index of the array

*/

private static <T extends Comparable<T>> int randomPartition(T[] array, int left, int right) {

int randomIndex = left + (int)(Math.random()*(right - left + 1));

swap(array, randomIndex, right);

return partition(array, left, right);

}

/**

* This method finds the partition index for an array

*

* @param array The array to be sorted

* @param left The first index of an array

* @param right The last index of an array

* Finds the partition index of an array

**/

private static <T extends Comparable<T>> int partition(T[] array, int left, int right) {

int mid = (left + right) >>> 1;

T pivot = array[mid];

while (left <= right) {

while (less(array[left], pivot)) {

++left;

}

while (less(pivot, array[right])) {

--right;

}

if (left <= right) {

swap(array, left, right);

++left;

--right;

}

}

return left;

}

// Driver Program

public static void main(String[] args) {

// For integer input

Integer[] array = {3, 4, 1, 32, 0, 1, 5, 12, 2, 5, 7, 8, 9, 2, 44, 111, 5};

QuickSort quickSort = new QuickSort();

quickSort.sort(array);

//Output => 0 1 1 2 2 3 4 5 5 5 7 8 9 12 32 44 111

print(array);

String[] stringArray = {"c", "a", "e", "b", "d"};

quickSort.sort(stringArray);

//Output => a b c d e

print(stringArray);

}

}