#include <vector>
#include <algorithm>
#include <functional>
void quickSort( std:: vector < long > & numberList, long low, long high)
{
long pivot, indexLow, indexHigh, temp;
if ( low< high) {
pivot = low;
indexLow = low;
indexHigh = high;
while ( indexLow< indexHigh) {
while ( numberList[ indexLow] <= numberList[ pivot] ) {
indexLow++ ;
}
while ( numberList[ indexHigh] > numberList[ pivot] ) {
indexHigh-- ;
}
if ( indexLow< indexHigh) {
temp = numberList[ indexLow] ;
numberList[ indexLow] = numberList[ indexHigh] ;
numberList[ indexHigh] = temp;
}
}
temp = numberList[ pivot] ;
numberList[ pivot] = numberList[ indexHigh] ;
numberList[ indexHigh] = temp;
std:: string s = std:: accumulate (
numberList.begin ( ) + 1 , numberList.end ( ) , std:: to_string ( numberList[ 0 ] ) ,
[ ] ( const std:: string & a, auto & b) {
return a + '-' + std:: to_string ( b) ;
} ) ;
printf ( "%s\n " , s.c_str ( ) ) ;
printf ( "%d, %d, %d, %d, %d\n " , low, indexLow, pivot, indexHigh, high) ;
printf ( "left %d %d\n " , low, indexHigh- 1 ) ;
quickSort( numberList, low, indexHigh- 1 ) ;
printf ( "right %d %d\n " , indexHigh+ 1 , high) ;
quickSort( numberList, indexHigh+ 1 , high) ;
printf ( "end\n " ) ;
}
}
int main( )
{
constexpr size_t count = 10 ;
std:: vector < long > arr( count) ;
std:: generate ( arr.begin ( ) , arr.end ( ) , bind( std:: uniform_int_distribution <> ( 0 ,count- 1 ) , std:: mt19937 ( ) ) ) ;
quickSort( arr, 0 , count- 1 ) ;
return std:: is_sorted ( arr.begin ( ) , arr.end ( ) ) ? 0 : 1 ;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp2b2lkIHF1aWNrU29ydChzdGQ6OnZlY3Rvcjxsb25nPiYgbnVtYmVyTGlzdCwgbG9uZyBsb3csIGxvbmcgaGlnaCkKewogICAgbG9uZyBwaXZvdCwgaW5kZXhMb3csIGluZGV4SGlnaCwgdGVtcDsKCiAgICBpZihsb3c8aGlnaCl7CiAgICAgICAgcGl2b3QgPSBsb3c7CiAgICAgICAgaW5kZXhMb3cgPSBsb3c7CiAgICAgICAgaW5kZXhIaWdoID0gaGlnaDsKCiAgICAgICAgd2hpbGUoaW5kZXhMb3c8aW5kZXhIaWdoKXsKICAgICAgICAgICAgd2hpbGUobnVtYmVyTGlzdFtpbmRleExvd10gPD0gbnVtYmVyTGlzdFtwaXZvdF0pewogICAgICAgICAgICBpbmRleExvdysrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlKG51bWJlckxpc3RbaW5kZXhIaWdoXSA+IG51bWJlckxpc3RbcGl2b3RdKXsKICAgICAgICAgICAgaW5kZXhIaWdoLS07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKGluZGV4TG93PGluZGV4SGlnaCl7CiAgICAgICAgICAgICAgICB0ZW1wID0gbnVtYmVyTGlzdFtpbmRleExvd107CiAgICAgICAgICAgICAgICBudW1iZXJMaXN0W2luZGV4TG93XSA9IG51bWJlckxpc3RbaW5kZXhIaWdoXTsKICAgICAgICAgICAgICAgIG51bWJlckxpc3RbaW5kZXhIaWdoXSA9IHRlbXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0ZW1wID0gbnVtYmVyTGlzdFtwaXZvdF07CiAgICAgICAgbnVtYmVyTGlzdFtwaXZvdF0gPSBudW1iZXJMaXN0W2luZGV4SGlnaF07CiAgICAgICAgbnVtYmVyTGlzdFtpbmRleEhpZ2hdID0gdGVtcDsKCiAgICAgICAgc3RkOjpzdHJpbmcgcyA9IHN0ZDo6YWNjdW11bGF0ZSgKICAgICAgICAJbnVtYmVyTGlzdC5iZWdpbigpKzEsIG51bWJlckxpc3QuZW5kKCksIHN0ZDo6dG9fc3RyaW5nKG51bWJlckxpc3RbMF0pLAogICAgICAgICAgICBbXShjb25zdCBzdGQ6OnN0cmluZyYgYSwgYXV0byYgYikgewogICAgICAgICAgICAgICAgcmV0dXJuIGEgKyAnLScgKyBzdGQ6OnRvX3N0cmluZyhiKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgcHJpbnRmKCIlc1xuIiwgcy5jX3N0cigpKTsKICAgICAgICBwcmludGYoIiVkLCAlZCwgJWQsICVkLCAlZFxuIiwgbG93LCBpbmRleExvdywgcGl2b3QsIGluZGV4SGlnaCwgaGlnaCk7CiAgICAgICAgcHJpbnRmKCJsZWZ0ICVkICVkXG4iLCBsb3csIGluZGV4SGlnaC0xKTsKICAgICAgICBxdWlja1NvcnQobnVtYmVyTGlzdCwgbG93LCBpbmRleEhpZ2gtMSk7CiAgICAgICAgcHJpbnRmKCJyaWdodCAlZCAlZFxuIiwgaW5kZXhIaWdoKzEsIGhpZ2gpOwogICAgICAgIHF1aWNrU29ydChudW1iZXJMaXN0LCBpbmRleEhpZ2grMSwgaGlnaCk7CiAgICAgICAgcHJpbnRmKCJlbmRcbiIpOwogICAgfQp9CgppbnQgbWFpbigpCnsKCWNvbnN0ZXhwciBzaXplX3QgY291bnQgPSAxMDsKCXN0ZDo6dmVjdG9yPGxvbmc+IGFycihjb3VudCk7CglzdGQ6OmdlbmVyYXRlKGFyci5iZWdpbigpLCBhcnIuZW5kKCksIGJpbmQoc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248PigwLGNvdW50LTEpLCBzdGQ6Om10MTk5MzcoKSkpOwoJcXVpY2tTb3J0KGFyciwgMCwgY291bnQtMSk7CglyZXR1cm4gc3RkOjppc19zb3J0ZWQoYXJyLmJlZ2luKCksIGFyci5lbmQoKSkgPyAwIDogMTsKfQo=
stdout
2-1-3-8-1-6-8-9-9-9
0, 7, 0, 6, 9
left 0 5
1-1-2-8-3-6-8-9-9-9
0, 3, 0, 2, 5
left 0 1
1-1-2-8-3-6-8-9-9-9
0, 2, 0, 1, 1
left 0 0
right 2 1
end
right 3 5
1-1-2-6-3-8-8-9-9-9
3, 7, 3, 5, 5
left 3 4
1-1-2-3-6-8-8-9-9-9
3, 5, 3, 4, 4
left 3 3
right 5 4
end
right 6 5
end
end
right 7 9
1-1-2-3-6-8-8-9-9-9
7, 11, 7, 9, 9
left 7 8
1-1-2-3-6-8-8-9-9-9
7, 11, 7, 8, 8
left 7 7
right 9 8
end
right 10 9
end
end