#include <iostream>
#include <cstring>
using namespace std;
template <typename T>
void print(T *mas, int size){
for(int i=0; i<size; i++)
cout<<mas[i];
cout<<endl;
}
template <typename T>
void qsortRecursive(T *mas, int size){
//Указатели в начало и в конец массива
int i = 0;
int j = size - 1;
//Центральный элемент массива
int mid = mas[size / 2];
//Делим массив
do {
//Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
//В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
while(mas[i] < mid) {
i++;
}
//В правой части пропускаем элементы, которые больше центрального
while(mas[j] > mid) {
j--;
}
//Меняем элементы местами
if (i <= j) {
int tmp = mas[i];
mas[i] = mas[j];
mas[j] = tmp;
i++;
j--;
}
} while (i <= j);
//Рекурсивные вызовы, если осталось, что сортировать
if(j > 0) {
//"Левый кусок"
qsortRecursive(mas, j + 1);
}
if (i < size) {
//"Првый кусок"
qsortRecursive(&mas[i], size - i);
}
}
int main()
{
char array [] = "aodsiafgerkeio";
int len = strlen(array);
cout << "Не отсортированный массив типа char: ";
print(array, len);
qsortRecursive(array, len);
cout << "Отсортированный массив типа char: ";
print(array, len);
int iArray [5] = {3,5,7,2,9};
cout << "Не отсортированный массив типа int: ";
print(iArray, 5);
qsortRecursive(iArray, 5);
cout << "Отсортированный массив типа int: ";
print(iArray, 5);
return 0;
}