#include <iostream>
#include <ctime>
using namespace std;
const int cols = 10;
int sel=0, quick=0, insert=0;
void selectionSort(int *data, int lenD)//сортировка выборкой
{
int j = 0;
for (int i = 0; i < lenD; i++) {
j = i;
for (int k = i; k < lenD; k++) {
if (data[j] > data[k]) {
j = k;
sel++;
}
}
swap(data[i], data[j]);
}
}
void printmassive(int* massive, int chislo)
{
for (int i = 0; i < cols; i++)
cout << massive[i] << " ";
cout << endl;
}
void vosstanov(int* massive, int* massive2, int size)
{
for (int i = 0; i < size; i++)
massive2[i] = massive[i];
}
void quickSort(int* data, int const len) /// быстрая сортировка
{
int const lenD = len;
int pivot = 0;
int ind = lenD / 2;
int i, j = 0, k = 0;
if (lenD > 1) {
int* L = new int[lenD];
int* R = new int[lenD];
pivot = data[ind];
for (i = 0; i < lenD; i++) {
if (i != ind) {
if (data[i] < pivot) {
L[j] = data[i];
j++;
}
else {
R[k] = data[i];
k++;
}
}
}
quickSort(L, j);
quickSort(R, k);
for (int cnt = 0; cnt < lenD; cnt++) {
if (cnt < j) {
data[cnt] = L[cnt];
quick++;
}
else if (cnt == j) {
data[cnt] = pivot;
quick++;
}
else {
data[cnt] = R[cnt - (j + 1)];
quick++;//pochemu tak mnogo ni ponimayt
}
}
}
}
void insertionSort(int data[], int lenD)// сортировка вставками
{
int key = 0;
int i = 0;
for (int j = 1; j < lenD; j++) {
key = data[j];
i = j - 1;
while (i >= 0 && data[i] > key) {
data[i + 1] = data[i];
i = i - 1;
data[i + 1] = key;
insert++;
}
}
}
int main()
{
srand(time(NULL));
int massive[cols],massive2[cols];
for (int i = 0; i < cols; i++)
massive[i] = (int)rand() % 20;
vosstanov(massive,massive2,cols);
printmassive(massive,cols);
selectionSort(massive2,cols);
printmassive(massive2,cols);
vosstanov(massive, massive2, cols);
quickSort(massive2, cols);
printmassive(massive2, cols);
vosstanov(massive, massive2, cols);
insertionSort(massive2, cols);
printmassive(massive2, cols);
int spi[3] = { sel, quick, insert };
for (int i = 0; i < 4; i++)
cout << spi[i] << '\t';
}