#include <iostream>
#include <algorithm>
using namespace std;
//**********************************************************
// partition selects the value in the middle of the *
// array set as the pivot. The list is rearranged so *
// all the values less than the pivot are on its left *
// and all the values greater than pivot are on its right. *
//**********************************************************
template <class T1>
int partition(T1 set[], int start, int end) {
int pivotValue, pivotIndex, mid;
mid = (start + end) / 2;
swap(set[start], set[mid]);
pivotIndex = start;
pivotValue = set[start];
for (int scan = start + 1; scan <= end; scan++) {
if (set[scan] < pivotValue) {
pivotIndex++;
swap(set[pivotIndex], set[scan]);
}
}
swap(set[start], set[pivotIndex]);
return pivotIndex;
}
//************************************************
// quickSort uses the quicksort algorithm to *
// sort set, from set[start] through set[end]. *
//************************************************
template <class T>
void quickSort(T set[], int start, int end) {
T pivotPoint;
if (start < end) {
// Get the pivot point.
pivotPoint = partition(set, start, end);
// Sort the first sub list.
quickSort(set, start, pivotPoint - 1);
// Sort the second sub list.
quickSort(set, pivotPoint + 1, end);
}
}
//**********************************************
// swap simply exchanges the contents of *
// value1 and value2. *
//**********************************************
template <class T>
void swap(T &value1, T &value2) {
int temp = value1;
value1 = value2;
value2 = temp;
}
int main() {
const int SIZE = 10; // Array size
int count; // Loop counter
// need to override the [] function?
int array[SIZE] = {7, 3, 9, 2, 0, 1, 8, 4, 6, 5};
// Display the array contents.
for (count = 0; count < SIZE; count++)
cout << array[count] << " ";
cout << endl;
// Sort the array.
quickSort(array, 0, SIZE - 1);
// Display the array contents.
for (count = 0; count < SIZE; count++)
cout << array[count] << " ";
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIHBhcnRpdGlvbiBzZWxlY3RzIHRoZSB2YWx1ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSAqCi8vIGFycmF5IHNldCBhcyB0aGUgcGl2b3QuIFRoZSBsaXN0IGlzIHJlYXJyYW5nZWQgc28gKgovLyBhbGwgdGhlIHZhbHVlcyBsZXNzIHRoYW4gdGhlIHBpdm90IGFyZSBvbiBpdHMgbGVmdCAqCi8vIGFuZCBhbGwgdGhlIHZhbHVlcyBncmVhdGVyIHRoYW4gcGl2b3QgYXJlIG9uIGl0cyByaWdodC4gKgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCnRlbXBsYXRlIDxjbGFzcyBUMT4KaW50IHBhcnRpdGlvbihUMSBzZXRbXSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpbnQgcGl2b3RWYWx1ZSwgcGl2b3RJbmRleCwgbWlkOwoKICAgIG1pZCA9IChzdGFydCArIGVuZCkgLyAyOwogICAgc3dhcChzZXRbc3RhcnRdLCBzZXRbbWlkXSk7CiAgICBwaXZvdEluZGV4ID0gc3RhcnQ7CiAgICBwaXZvdFZhbHVlID0gc2V0W3N0YXJ0XTsKICAgIGZvciAoaW50IHNjYW4gPSBzdGFydCArIDE7IHNjYW4gPD0gZW5kOyBzY2FuKyspIHsKICAgICAgICBpZiAoc2V0W3NjYW5dIDwgcGl2b3RWYWx1ZSkgewogICAgICAgICAgICBwaXZvdEluZGV4Kys7CiAgICAgICAgICAgIHN3YXAoc2V0W3Bpdm90SW5kZXhdLCBzZXRbc2Nhbl0pOwogICAgICAgIH0KICAgIH0KICAgIHN3YXAoc2V0W3N0YXJ0XSwgc2V0W3Bpdm90SW5kZXhdKTsKICAgIHJldHVybiBwaXZvdEluZGV4Owp9CgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBxdWlja1NvcnQgdXNlcyB0aGUgcXVpY2tzb3J0IGFsZ29yaXRobSB0byAqCi8vIHNvcnQgc2V0LCBmcm9tIHNldFtzdGFydF0gdGhyb3VnaCBzZXRbZW5kXS4gKgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgcXVpY2tTb3J0KFQgc2V0W10sIGludCBzdGFydCwgaW50IGVuZCkgewogICAgVCBwaXZvdFBvaW50OwoKICAgIGlmIChzdGFydCA8IGVuZCkgewovLyBHZXQgdGhlIHBpdm90IHBvaW50LgogICAgICAgIHBpdm90UG9pbnQgPSBwYXJ0aXRpb24oc2V0LCBzdGFydCwgZW5kKTsKLy8gU29ydCB0aGUgZmlyc3Qgc3ViIGxpc3QuCiAgICAgICAgcXVpY2tTb3J0KHNldCwgc3RhcnQsIHBpdm90UG9pbnQgLSAxKTsKLy8gU29ydCB0aGUgc2Vjb25kIHN1YiBsaXN0LgogICAgICAgIHF1aWNrU29ydChzZXQsIHBpdm90UG9pbnQgKyAxLCBlbmQpOwogICAgfQp9Ci8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBzd2FwIHNpbXBseSBleGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mICoKLy8gdmFsdWUxIGFuZCB2YWx1ZTIuICoKLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCBzd2FwKFQgJnZhbHVlMSwgVCAmdmFsdWUyKSB7CiAgICBpbnQgdGVtcCA9IHZhbHVlMTsKCiAgICB2YWx1ZTEgPSB2YWx1ZTI7CiAgICB2YWx1ZTIgPSB0ZW1wOwp9CgppbnQgbWFpbigpIHsKICAgIGNvbnN0IGludCBTSVpFID0gMTA7IC8vIEFycmF5IHNpemUKICAgIGludCBjb3VudDsgLy8gTG9vcCBjb3VudGVyCgovLyBuZWVkIHRvIG92ZXJyaWRlIHRoZSBbXSBmdW5jdGlvbj8KICAgIGludCBhcnJheVtTSVpFXSA9IHs3LCAzLCA5LCAyLCAwLCAxLCA4LCA0LCA2LCA1fTsKCi8vIERpc3BsYXkgdGhlIGFycmF5IGNvbnRlbnRzLgogICAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgU0laRTsgY291bnQrKykKICAgICAgICBjb3V0IDw8IGFycmF5W2NvdW50XSA8PCAiICI7CiAgICBjb3V0IDw8IGVuZGw7CgovLyBTb3J0IHRoZSBhcnJheS4KICAgIHF1aWNrU29ydChhcnJheSwgMCwgU0laRSAtIDEpOwoKLy8gRGlzcGxheSB0aGUgYXJyYXkgY29udGVudHMuCiAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBTSVpFOyBjb3VudCsrKQogICAgICAgIGNvdXQgPDwgYXJyYXlbY291bnRdIDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9CgoK