/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
int b[] = {10, 9, 8, 7, 7, 7, 7, 3, 2, 1};
sort(b,0,b.length-1);
}
static void sort(int a[], int left, int right) {
if (right > left){
int i=left, j=right, tmp;
//we want j to be right, not right-1 since that leaves out a number during recursion
int v = a[right]; //pivot
do {
while(a[i]<v)
i++;
while(a[j]>v)
//no need to check for 0, the right condition for recursion is the 2 if statements below.
j--;
if( i <= j){ //your code was i<j
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
//we need to +/- both i,j, else it will stick at 0 or be same number
}
} while(i <= j); //your code was i<j, hence infinite loop on 0 case
//you had a swap here, I don't think it's needed.
//this is the 2 conditions we need to avoid infinite loops
// check if left < j, if it isn't, it's already sorted. Done
if(left < j) sort(a,left,j);
//check if i is less than right, if it isn't it's already sorted. Done
// here i is now the 'middle index', the slice for divide and conquer.
if(i < right) sort(a,i,right);
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlpbnQgYltdID0gezEwLCA5LCA4LCA3LCA3LCA3LCA3LCAzLCAyLCAxfTsKCQlzb3J0KGIsMCxiLmxlbmd0aC0xKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGIpKTsKCX0KCQoJc3RhdGljIHZvaWQgc29ydChpbnQgYVtdLCBpbnQgbGVmdCwgaW50IHJpZ2h0KSAgIHsJCiAgICAgICBpZiAocmlnaHQgPiBsZWZ0KXsKICAgICAgICBpbnQgaT1sZWZ0LCBqPXJpZ2h0LCB0bXA7ICAgIAogICAgICAgIC8vd2Ugd2FudCBqIHRvIGJlIHJpZ2h0LCBub3QgcmlnaHQtMSBzaW5jZSB0aGF0IGxlYXZlcyBvdXQgYSBudW1iZXIgZHVyaW5nIHJlY3Vyc2lvbgoKICAgICAgICBpbnQgdiA9IGFbcmlnaHRdOyAvL3Bpdm90CiAgICAgICAgCiAgICAgICAgZG8gewogICAgICAgICAgICB3aGlsZShhW2ldPHYpCiAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB3aGlsZShhW2pdPnYpIAogICAgICAgICAgICAvL25vIG5lZWQgdG8gY2hlY2sgZm9yIDAsIHRoZSByaWdodCBjb25kaXRpb24gZm9yIHJlY3Vyc2lvbiBpcyB0aGUgMiBpZiBzdGF0ZW1lbnRzIGJlbG93LgogICAgICAgICAgICAgIGotLTsKCiAgICAgIAkgICAgaWYoIGkgPD0gail7ICAgICAgICAgICAgLy95b3VyIGNvZGUgd2FzIGk8agogICAgICAgICAgICAgICB0bXAgPSBhW2ldOwogICAgICAgICAgICAgICBhW2ldID0gYVtqXTsKICAgICAgICAgICAgICAgYVtqXSA9IHRtcDsKICAgICAgICAgICAgICAgaSsrOyAgICAgICAgICAgIAogICAgICAgICAgICAgICBqLS07CiAgICAgICAgICAgICAgIC8vd2UgbmVlZCB0byArLy0gYm90aCBpLGosIGVsc2UgaXQgd2lsbCBzdGljayBhdCAwIG9yIGJlIHNhbWUgbnVtYmVyCiAgICAgICAgICAgIH0KICAgICAgIH0gd2hpbGUoaSA8PSBqKTsgICAgICAgICAgIC8veW91ciBjb2RlIHdhcyBpPGosIGhlbmNlIGluZmluaXRlIGxvb3Agb24gMCBjYXNlCgogICAgICAgIC8veW91IGhhZCBhIHN3YXAgaGVyZSwgSSBkb24ndCB0aGluayBpdCdzIG5lZWRlZC4KICAgICAgICAvL3RoaXMgaXMgdGhlIDIgY29uZGl0aW9ucyB3ZSBuZWVkIHRvIGF2b2lkIGluZmluaXRlIGxvb3BzCiAgICAgICAgLy8gY2hlY2sgaWYgbGVmdCA8IGosIGlmIGl0IGlzbid0LCBpdCdzIGFscmVhZHkgc29ydGVkLiBEb25lCgkgICAgaWYobGVmdCA8IGopICBzb3J0KGEsbGVmdCxqKTsKICAgICAgICAvL2NoZWNrIGlmIGkgaXMgbGVzcyB0aGFuIHJpZ2h0LCBpZiBpdCBpc24ndCBpdCdzIGFscmVhZHkgc29ydGVkLiBEb25lCiAgICAgICAgLy8gaGVyZSBpIGlzIG5vdyB0aGUgJ21pZGRsZSBpbmRleCcsIHRoZSBzbGljZSBmb3IgZGl2aWRlIGFuZCBjb25xdWVyLgogICAgICAgIGlmKGkgPCByaWdodCkgc29ydChhLGkscmlnaHQpOwogICAgICB9CiAgIH0KCQoJCn0=