#include <iostream>
#include <string>
using namespace std;
static int dbgdepth = 0;
void quicksort(int *tablica, int lewy, int prawy) {
int v = tablica[(lewy + prawy) / 2];
int i, j, x;
i = lewy;
j = prawy;
cerr << string(dbgdepth, ' ') << "++ quicksort(" << tablica << ", " << lewy << ", " << prawy << ")\n"; dbgdepth += 2;
cerr << string(dbgdepth, ' ') << "v = " << v << '\n';
do {
while (tablica[i] < v)
i++;
while (tablica[j] > v)
j--;
cerr << string(dbgdepth, ' ') << "tablica[i=" << i << "] = " << tablica[i] << '\n';
cerr << string(dbgdepth, ' ') << "tablica[j=" << j << "] = " << tablica[j] << '\n';
if (i <= j) {
cerr << string(dbgdepth, ' ') << "swap ...\n";
x = tablica[i];
tablica[i] = tablica[j];
tablica[j] = x;
i++;
j--;
}
} while (i <= j);
if (j > lewy)
quicksort(tablica, lewy, j);
if (i < prawy)
quicksort(tablica, i, prawy);
dbgdepth -= 2; cerr << string(dbgdepth, ' ') << "-- quicksort()\n";
}
void display(int const * tablica, int count) {
cout << "tablica: ";
while (count--) cout << ' ' << *tablica++;
cout << '\n';
}
int main()
{
int array [] = {12, 81, 49, 17, 29, 42};
display(array, sizeof(array) / sizeof(array[0]));
quicksort(array, 0, sizeof(array) / sizeof(array[0]) - 1);
display(array, sizeof(array) / sizeof(array[0]));
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdGF0aWMgaW50IGRiZ2RlcHRoID0gMDsKCnZvaWQgcXVpY2tzb3J0KGludCAqdGFibGljYSwgaW50IGxld3ksIGludCBwcmF3eSkgewogIGludCB2ID0gdGFibGljYVsobGV3eSArIHByYXd5KSAvIDJdOwogIGludCBpLCBqLCB4OwogIGkgPSBsZXd5OwogIGogPSBwcmF3eTsKCiAgY2VyciA8PCBzdHJpbmcoZGJnZGVwdGgsICcgJykgPDwgIisrIHF1aWNrc29ydCgiIDw8IHRhYmxpY2EgPDwgIiwgIiA8PCBsZXd5IDw8ICIsICIgPDwgcHJhd3kgPDwgIilcbiI7IGRiZ2RlcHRoICs9IDI7CgogIGNlcnIgPDwgc3RyaW5nKGRiZ2RlcHRoLCAnICcpIDw8ICJ2ID0gIiA8PCB2IDw8ICdcbic7CgogIGRvIHsKICAgIHdoaWxlICh0YWJsaWNhW2ldIDwgdikKICAgICAgaSsrOwogICAgd2hpbGUgKHRhYmxpY2Fbal0gPiB2KQogICAgICBqLS07CgogICAgY2VyciA8PCBzdHJpbmcoZGJnZGVwdGgsICcgJykgPDwgInRhYmxpY2FbaT0iIDw8IGkgPDwgIl0gPSAiIDw8IHRhYmxpY2FbaV0gPDwgJ1xuJzsKICAgIGNlcnIgPDwgc3RyaW5nKGRiZ2RlcHRoLCAnICcpIDw8ICJ0YWJsaWNhW2o9IiA8PCBqIDw8ICJdID0gIiA8PCB0YWJsaWNhW2pdIDw8ICdcbic7CgogICAgaWYgKGkgPD0gaikgewoKICAgICAgY2VyciA8PCBzdHJpbmcoZGJnZGVwdGgsICcgJykgPDwgInN3YXAgLi4uXG4iOwoKICAgICAgeCA9IHRhYmxpY2FbaV07CiAgICAgIHRhYmxpY2FbaV0gPSB0YWJsaWNhW2pdOwogICAgICB0YWJsaWNhW2pdID0geDsKICAgICAgaSsrOwogICAgICBqLS07CiAgICB9CiAgfSB3aGlsZSAoaSA8PSBqKTsKICBpZiAoaiA+IGxld3kpCiAgICBxdWlja3NvcnQodGFibGljYSwgbGV3eSwgaik7CiAgaWYgKGkgPCBwcmF3eSkKICAgIHF1aWNrc29ydCh0YWJsaWNhLCBpLCBwcmF3eSk7CgogIGRiZ2RlcHRoIC09IDI7IGNlcnIgPDwgc3RyaW5nKGRiZ2RlcHRoLCAnICcpIDw8ICItLSBxdWlja3NvcnQoKVxuIjsKfQoKdm9pZCBkaXNwbGF5KGludCBjb25zdCAqIHRhYmxpY2EsIGludCBjb3VudCkgewogIGNvdXQgPDwgInRhYmxpY2E6ICI7CiAgd2hpbGUgKGNvdW50LS0pIGNvdXQgPDwgJyAnIDw8ICp0YWJsaWNhKys7CiAgY291dCA8PCAnXG4nOwp9CgppbnQgbWFpbigpCnsKICBpbnQgYXJyYXkgW10gPSB7MTIsIDgxLCA0OSwgMTcsIDI5LCA0Mn07CiAgZGlzcGxheShhcnJheSwgc2l6ZW9mKGFycmF5KSAvIHNpemVvZihhcnJheVswXSkpOwogIHF1aWNrc29ydChhcnJheSwgMCwgc2l6ZW9mKGFycmF5KSAvIHNpemVvZihhcnJheVswXSkgLSAxKTsKICBkaXNwbGF5KGFycmF5LCBzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKGFycmF5WzBdKSk7CiAgcmV0dXJuIDA7Cn0K
tablica: 12 81 49 17 29 42
tablica: 12 17 29 42 49 81
++ quicksort(0x7fff7ede7240, 0, 5)
v = 49
tablica[i=1] = 81
tablica[j=5] = 42
swap ...
tablica[i=2] = 49
tablica[j=4] = 29
swap ...
tablica[i=4] = 49
tablica[j=3] = 17
++ quicksort(0x7fff7ede7240, 0, 3)
v = 42
tablica[i=1] = 42
tablica[j=3] = 17
swap ...
tablica[i=3] = 42
tablica[j=2] = 29
++ quicksort(0x7fff7ede7240, 0, 2)
v = 17
tablica[i=1] = 17
tablica[j=1] = 17
swap ...
-- quicksort()
-- quicksort()
++ quicksort(0x7fff7ede7240, 4, 5)
v = 49
tablica[i=4] = 49
tablica[j=4] = 49
swap ...
-- quicksort()
-- quicksort()