//---------------------------------------------------------------------------------------- void quicksort(vector<int> & x, int l, int u) { if(l >= u) return; RandomNumberGenerator rng; int random = rng.getRandomNumberInRange(l, u); swap(x[l], x[random]); int t = x[l]; int i = l; int j = u + 1; while(true) { do { ++i; }while(i <= u && x[i] <= t); do { --j; }while(x[j] > t); if(i > j) break; swap(x[i], x[j]); } //Get back randomly picked pivot in its place swap(x[l], x[j]); quicksort(x, l, j - 1); quicksort(x, j + 1, u); }