/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class JavaApplication1 {
public static void main
(String args
[]) {
int[] input = { 23, 31, 1, 21, 36, 72};
System.
out.
println("Before sorting : " + Arrays.
toString(input
)); quickSort(input); // sort the integer array using quick sort algorithm
System.
out.
println("After sorting : " + Arrays.
toString(input
));
// input with duplicates
int[] withDuplicates = { 11, 14, 16, 12, 11, 15};
System.
out.
println("Before sorting : " + Arrays.
toString(withDuplicates
)); quickSort(withDuplicates); // sort the integer array using quick sort algorithm
System.
out.
println("After sorting : " + Arrays.
toString(withDuplicates
)); }
/**
* public method exposed to client, sorts given array using QuickSort
* Algorithm in Java
* @param array
*/
public static void quickSort(int[] array) {
if(array.length <= 1) return;
int leftwall = 0;
int rightwall = array.length - 1 ;
int pivot = array[array.length/2];
rechelperquickSort(array,leftwall,rightwall,pivot);
}
public static void rechelperquickSort(int[] array ,int left , int right , int pivot ){
int idx;
idx = left;
if(left>=right) return;
while(idx<=right){
if(pivot > array[idx])swapinarray(array,left++,idx);
idx++;
}
if(left >= right) return;
pivot = array[left+1];
rechelperquickSort(array,left+1,right,pivot);
rechelperquickSort(array,0,left,array[left/2]);
}
public static void swapinarray(int[] array,int leftelementidx, int rightelementidx){
int tmp = array[leftelementidx];
array[leftelementidx] = array[rightelementidx];
array[rightelementidx] = tmp;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmNsYXNzIEphdmFBcHBsaWNhdGlvbjEgewoKcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewoKICAgIGludFtdIGlucHV0ID0geyAyMywgMzEsIDEsIDIxLCAzNiwgNzJ9OwogICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgc29ydGluZyA6ICIgKyBBcnJheXMudG9TdHJpbmcoaW5wdXQpKTsKICAgIHF1aWNrU29ydChpbnB1dCk7IC8vIHNvcnQgdGhlIGludGVnZXIgYXJyYXkgdXNpbmcgcXVpY2sgc29ydCBhbGdvcml0aG0KICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgc29ydGluZyA6ICIgKyBBcnJheXMudG9TdHJpbmcoaW5wdXQpKTsKCiAgICAvLyBpbnB1dCB3aXRoIGR1cGxpY2F0ZXMKICAgIGludFtdIHdpdGhEdXBsaWNhdGVzID0geyAxMSwgMTQsIDE2LCAxMiwgMTEsIDE1fTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIHNvcnRpbmcgOiAiICsgQXJyYXlzLnRvU3RyaW5nKHdpdGhEdXBsaWNhdGVzKSk7CiAgICBxdWlja1NvcnQod2l0aER1cGxpY2F0ZXMpOyAvLyBzb3J0IHRoZSBpbnRlZ2VyIGFycmF5IHVzaW5nIHF1aWNrIHNvcnQgYWxnb3JpdGhtCiAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIHNvcnRpbmcgOiAiICsgQXJyYXlzLnRvU3RyaW5nKHdpdGhEdXBsaWNhdGVzKSk7Cn0KCi8qKgogKiBwdWJsaWMgbWV0aG9kIGV4cG9zZWQgdG8gY2xpZW50LCBzb3J0cyBnaXZlbiBhcnJheSB1c2luZyBRdWlja1NvcnQKICogQWxnb3JpdGhtIGluIEphdmEKICogQHBhcmFtIGFycmF5CiAqLwpwdWJsaWMgc3RhdGljIHZvaWQgcXVpY2tTb3J0KGludFtdIGFycmF5KSB7CiAgIGlmKGFycmF5Lmxlbmd0aCA8PSAxKSByZXR1cm47CiAgIGludCBsZWZ0d2FsbCA9IDA7CiAgIGludCByaWdodHdhbGwgID0gYXJyYXkubGVuZ3RoIC0gMSA7CiAgIGludCBwaXZvdCA9IGFycmF5W2FycmF5Lmxlbmd0aC8yXTsgCiAgIHJlY2hlbHBlcnF1aWNrU29ydChhcnJheSxsZWZ0d2FsbCxyaWdodHdhbGwscGl2b3QpOyAKfQoKCnB1YmxpYyBzdGF0aWMgdm9pZCByZWNoZWxwZXJxdWlja1NvcnQoaW50W10gYXJyYXkgLGludCBsZWZ0ICwgaW50IHJpZ2h0ICwgaW50IHBpdm90ICl7CgogICAgaW50IGlkeDsgICAKICAgIGlkeCA9IGxlZnQ7CgogICAgaWYobGVmdD49cmlnaHQpIHJldHVybjsKCiAgICB3aGlsZShpZHg8PXJpZ2h0KXsKCiAgICAgICAgaWYocGl2b3QgPiBhcnJheVtpZHhdKXN3YXBpbmFycmF5KGFycmF5LGxlZnQrKyxpZHgpOwoKICAgICAgICBpZHgrKzsKICAgIH0KICAgIGlmKGxlZnQgPj0gcmlnaHQpIHJldHVybjsKICAgIHBpdm90ID0gYXJyYXlbbGVmdCsxXTsKICAgIHJlY2hlbHBlcnF1aWNrU29ydChhcnJheSxsZWZ0KzEscmlnaHQscGl2b3QpOwogICAgcmVjaGVscGVycXVpY2tTb3J0KGFycmF5LDAsbGVmdCxhcnJheVtsZWZ0LzJdKTsKfQoKcHVibGljIHN0YXRpYyB2b2lkIHN3YXBpbmFycmF5KGludFtdIGFycmF5LGludCBsZWZ0ZWxlbWVudGlkeCwgaW50IHJpZ2h0ZWxlbWVudGlkeCl7CiAgICBpbnQgdG1wID0gYXJyYXlbbGVmdGVsZW1lbnRpZHhdOwogICAgYXJyYXlbbGVmdGVsZW1lbnRpZHhdID0gYXJyYXlbcmlnaHRlbGVtZW50aWR4XTsKICAgIGFycmF5W3JpZ2h0ZWxlbWVudGlkeF0gPSB0bXA7ICAgIAp9Cgp9
Before sorting : [23, 31, 1, 21, 36, 72]
After sorting : [1, 21, 23, 31, 36, 72]
Before sorting : [11, 14, 16, 12, 11, 15]
After sorting : [11, 11, 12, 14, 16, 15]