Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private int array[];
- private int length;
- public void sort(int[] inputArr) {
- if (inputArr.length == 0) {
- return;
- }
- this.array = inputArr;
- length = inputArr.length;
- quickSort(0, length - 1);
- }
- private void quickSort(int lowerIndex, int higherIndex) {
- int i = lowerIndex;
- int j = higherIndex;
- // calculate pivot number, I am taking pivot as middle index number
- int mid = array[(higherIndex-1)/2];
- // Divide into two arrays
- int pivot = findMedian(array, i, mid, j);
- swap(pivot, 0);
- while (i <= j) {
- /**
- * In each iteration, we will identify a number from left side which
- * is greater then the pivot value, and also we will identify a number
- * from right side which is less then the pivot value. Once the search
- * is done, then we exchange both numbers.
- */
- while (array[i] < mid) {
- i++;
- }
- while (array[j] > mid) {
- j--;
- }
- if (i <= j) {
- swap(i, j);
- //move index to next position on both sides
- i++;
- j--;
- }
- }
- // call quickSort() method recursively
- if (lowerIndex < j)
- quickSort(lowerIndex, j);
- if (i < higherIndex)
- quickSort(i, higherIndex);
- }
- public static int findMedian (int[] array, int a, int b, int c) {
- if ((array[a] > array[b] && array[a] < array[c]) || (array[a] > array[c] && array[a] < array[b])) {
- return a;
- } else if ((array[b] > array[a] && array[b] < array[c]) || (array[b] > array[c] && array[b] < array[a])) {
- return b;
- }
- return c;
- }
- private void swap(int i, int j) {
- int temp = array[i];
- array[i] = array[j];
- array[j] = temp;
- }
- public static void main(String a[]){
- MyQuickSort sorter = new MyQuickSort();
- int[] input = {24,2,45,20,56,75,2,56,99,53,12};
- sorter.sort(input);
- for(int i:input){
- System.out.print(i);
- System.out.print(" ");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement