void sort_selection(vector<int>&arr)
{
for (int j = 0; j < arr.size() - 1; j++)
{
int maxpos = j;
for (int i = j + 1; i < arr.size(); i++)
{
if (arr[i] > arr[maxpos])
{
maxpos = i;
}
}
swap(arr[j], arr[maxpos]);
}
}
```cpp
int max(vector<int>arr, int l, int r)
{
int m = arr[l];
for (int i = 1 + l; i < r; i++)
{
m = arr[i] > m ? arr[i] : m;
}
return m;
}
int min(vector<int>arr, int l, int r)
{
int m = arr[l];
for (int i = l + 1; i < r; i++)
{
m = arr[i] < m ? arr[i] : m;
}
return m;
}
void sort_count(vector<int> &arr)
{
int mb = max(arr, 0, arr.size());
vector<int>buff;
buff.resize(mb + 1);
for (int i = 0; i < arr.size(); i++)
{
++buff[arr[i]];
}
int numb = 0;
for (int i = buff.size() - 1; i >= 0; i--)
{
if (buff[i] != 0)
{
for (int j = 0; j < buff[i]; j++)
arr[numb++] = i;
}
}
}
void sort_count2(vector<int> &arr)
{
int maxB=max(arr,0,arr.size());
int minB=min(arr,0,arr.size());
vector<int>buff;
buff.resize(maxB-minB + 1);
for (int i = 0; i < arr.size(); i++)
{
++buff[arr[i]-minB];
}
int numb = 0;
for (int i = buff.size() - 1; i >= 0; i--)
{
if (buff[i] != 0)
{
for (int j = 0; j < buff[i]; j++)
{
arr[numb++] = i+minB;
}
}
}
}
void sort_bubble(vector<int>&arr)
{
for (int j = 0; j < arr.size() - 1; j++)
{
bool isNotSorted = true;
for (int i = 0; i < arr.size() - 1 - j; i++)
{
if (arr[i] > arr[i + 1])
{
swap(arr[i], arr[i + 1]);
isNotSorted = false;
}
if (isNotSorted == true)
{
break;
}
}
}
}
void sort_insert(vector<int>&arr)
{
for (int i = 1; i < arr.size(); i++)
{
int v = arr[i];
int j = 0;
for (j = i - 1; j >= 0; j--)
{
if (arr[j] > v)
{
arr[j + 1] = arr[j];
}
else
{
break;
}
}
arr[j + 1] = v;
}
}
void sort_shell(vector<int>&arr)
{
int increament = arr.size() / 2;
while (increament != 0)
{
for (int i = increament; i < arr.size(); i++)
{
int v = arr[i];
int j;
for (j = i - increament; j >= 0; j-=increament)
{
if (arr[j] > v)
{
arr[j + increament] = arr[j];
}
else
{
break;
}
}
arr[j + increament] = v;
}
increament= increament>>1;
}
}