#include "Header.h";
/*Фунция ввода размера массива пользоватлем, возвращает размер массива*/
int razmer()
{
int N;
cout << "Для выхода из программы введите 999" << endl;
cout << "Введите размер массива: " << endl;
cin >> N;
return N;
}
/*Функция выполняющая глупую сортировку, выводит на екран время сортировки в милисикундах*/
void stupid(int* mas, int N)
{
int counter = 0;
int start = clock();
for (int i = 0; i < N - 1; i++){
if (mas>mas[i + 1]){
int per = mas;
mas = mas[i + 1];
mas[i + 1] = per;
i = -1;
counter++;
}
}
int end = clock();
cout << "Глупая сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}
/*Функция выполняющая пузырьковую сортировку, выводит на екран время сортировки в милисикундах*/
void bubble(int* mas, int N)
{
int counter = 0;
int tmp;
int start = clock();
for (int i = 0; i < N - 1; i++)
{
for (int j = 0; j<N - i - 1; j++)
{
if (mas>mas[j + 1])
{
tmp = mas;
mas = mas[j + 1];
mas[j + 1] = tmp;
counter++;
}
}
}
int end = clock();
cout << "Пузырьковая сортировка: " << end - start << " ms " << "перестановок: " << counter <<endl;
}
/*Функция выполняющая шейкерную сортировку, выводит на екран время сортировки в милисикундах*/
void shake(int* mas, int N)
{
int counter = 0;
int tmp;
int start = clock();
for (int i = 0; i < N - 1; i++)
{
for (int j = i; j<N - i - 1; j++)
{
if (mas>mas[j + 1])
{
tmp = mas;
mas = mas[j + 1];
mas[j + 1] = tmp;
counter++;
}
}
for (int j = N - i - 1; j >= 0; j--)
{
if (mas<mas[j - 1])
{
tmp = mas;
mas = mas[j - 1];
mas[j - 1] = tmp;
counter++;
}
}
}
int end = clock();
cout << "Шейкерная сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}
/*Функция выполняющая четно-нечетную сортировку, выводит на екран время сортировки в милисикундах*/
void chet_nechet(int* arr, int N)
{
int count=0;
int counter = 0;
int tmp;
int start = clock();
while (counter >= 0)
{
for (int j = 1; j<N - 1; j = j + 2)
{
if (arr>arr[j + 1])
{
tmp = arr;
arr = arr[j + 1];
arr[j + 1] = tmp;
counter = 1;
count++;
}
}
for (int j = 0; j<N - 1; j = j + 2)
{
if (arr>arr[j + 1])
{
tmp = arr;
arr = arr[j + 1];
arr[j + 1] = tmp;
counter = 1;
count++;
}
}
counter = counter - 1;
}
int end = clock();
cout << "Чет-нечет сортировка: " << end - start << " ms " << "перестановок: " << count << endl;
}
/*Функция выполняющая сортировку вставками, выводит на екран время сортировки в милисикундах*/
void insert(int* mas, int N)
{
int counter = 0;
int i,j,tmp;
int start = clock();
for (i = 1; i < N; i++)
{
tmp = mas;
for (j = i - 1; j >= 0 && mas > tmp; j--)
{
mas[j + 1] = mas;
counter++;
}
mas[j + 1] = tmp;
}
int end = clock();
cout << "Вставками сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}
/*Функция выполняющая сортировку расческа, выводит на екран время сортировки в милисикундах*/
int createGap(int gap)
{
gap = (gap * 10) / 1.3;
if (gap == 9 || gap == 10)
gap = 11;
if (gap < 1)
gap = 1;
return gap;
}//end newGap Function
void combSort(int data[], int size)
{
int counter = 0;
int gap = size;
int start = clock();
while (true) {
gap = createGap(gap);
bool swapped = false;
for (int i = 0; i < size - gap; i++) {
int j = i + gap;
if (data > data){
swap(data, data);
swapped = true;
counter++;
}//end if
}//end for
if (gap == 1 && !swapped)
break;
}//end for
int end = clock();
cout << "Расческа сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}//end combSort Function
/*конец расчески*/
int main()
{
setlocale(LC_ALL, "rus");
/*=НАЧАЛО=переменной N присваиваем размер размер введенного пользователем массива*/
while (true)
{
int N = razmer();
/*=КОНЕЦ=переменной N присваиваем размер размер введенного пользователем массива*/
/*=НАЧАЛО=генерируем массив размера который ввел пользователь*/
srand(time(NULL));
int *mas = new int[N];
int *mass = new int[N];
int *masss = new int[N];
int *massss = new int[N];
int *masssss = new int[N];
int *massssss = new int[N];
/*=НАЧАЛО=Выход из программы*/
if (N == 999)
{
delete[] mas;
delete[] mass;
delete[] masss;
delete[] massss;
delete[] masssss;
break;
}
/*=КОНЕЦ=выход из программы*/
/*=НАЧАЛО=генерируем массив+делаем копии*/
for (int i = 0; i < N; i++)
{
mas = rand() % 100;
mass = mas;
masss = mas;
massss = mas;
masssss = mas;
massssss = mas
;
}
/*=КОНЕЦ=генерируем массив размера который ввел пользователь*/
bubble(mas, N);//пузырьковая
shake(mass, N);//шейкерная
chet_nechet(masss, N);//чет-нечет
insert(massss, N);//вставками
combSort(masssss, N);//расческа
//stupid(massssss, N);//глупая
delete[] mas;
delete[] mass;
delete[] masss;
delete[] massss;
delete[] masssss;
}
system("pause");
return 0;
}