#include <iostream>
#include <ctime>
using namespace std;
template<class T>
int partition(T arr[], int left, int right) {
swap(arr[left], arr[rand() % (right - left + 1) + left]);
T v = arr[left];
int j = left;
for (int i = left + 1; i <= right; ++i) {
if (arr[i] < v) {
swap(arr[++j], arr[i]);
}
}
swap(arr[left], arr[j]);
return j;
}
template<class T>
void quickSort(T arr[], int left, int right) {
if (left >= right) {
return;
}
int pos = partition(arr, left, right);
quickSort(arr, left, pos - 1);
quickSort(arr, pos + 1, right);
}
template<class T>
void quickSort(T arr[], int n) {
srand(time(nullptr));
quickSort(arr, 0, n - 1);
}
int main() {
int arr[] = {8, -1, 0, 6, -2, 1, 7, 9, 0, 2, 5, 4, 3};
int len = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, len);
for (const int &temp: arr) {
cout << temp << " ";
}
cout << endl;
return 0;
}