#include <iostream>
#include <iomanip>
#include <conio.h>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>
using namespace std;
int a[1000];
void Sort1()
{
int mas[1000];//сортируемый вектор
int size[12]={25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};//размер вектора
int result[12][2];//массив результатов
int i, j, n, key;
int start_time, end_time, search_time;//начальное, конечное и искомое время
srand(time(NULL));//для рандома
for (n=0; n<12; n++)//перебирает все размеры вектора
{
result[n][0]=size[n];//первый столбец - размер сортируемого вектора
cout<<endl;
//cout<<"Длина вектора = "<<size[n]<<":\n";
for (i=0; i<size[n]; i++)//вывод неупорядоченного вектора
{
mas[i]=rand() % 4000 + 1000;//генерирует числа от 1000 до 5000
/*if (i % 10 == 0)//в одной строке 10 чисел(чтоб красиво было)
cout<<endl;
cout<<setw(7)<<mas[i];*/
}
//getch();
cout<<endl;
cout<<"Производится сортировка вектора длиной "<<size[n]<<":\n";
start_time=clock();//запуск таймера - фиксируем начальное время
for (int i=0; i<size[n]; i++)//сортировка
for (int j=size[n]-1; j>i; j--)
{
Sleep(1);//задержа на 1млс
if (mas[j]<mas[j-1])
{
swap (mas[j], mas[j-1]);
}
}
end_time=clock();//фиксируем конечное время
/*for (int i=0; i<size[n]; i++)//вывод отсортированного вектора
{
if (i % 10 == 0)
cout<<endl;
cout<<setw(7)<<mas[i];
}*/
cout<<"Сортировка произведена";
search_time=end_time - start_time;//расчет времени работы алгоритма
result[n][1]=search_time;//второй столбец - затраченное время (в миллисекундах)
getch();
cout<<endl;
}
cout<<endl<<"Время работы алгоритма:"<<endl;
for (i=0; i<12; i++)//вывод результатов
{
cout<<endl;
for (j=0; j<2; j++)
cout<<setw(8)<<result[i][j]<<" ";
}
}
void BSort(int m, int r)
{
int x = a[m + (r - m) / 2];
int i = m;
int j = r;
while(i <= j)
{
while(a[i] < x) i++;
while(a[j] > x) j--;
{ Sleep(1);
if(i <= j)
{
swap(a[i], a[j]);
i++;
j--;
}
}
}
if (i<r)
BSort(i, r);
if (m<j)
BSort(m, j);
}
void Sort2()
{
int size[12]={25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};//размер вектора
int result[12][2];//массив результатов
int i, j, n, key;
int start_time, end_time, search_time;//начальное, конечное и искомое время
srand(time(NULL));//для рандома
for (n=0; n<12; n++)//перебирает все размеры вектора
{
result[n][0]=size[n];//первый столбец - размер сортируемого вектора
cout<<endl;
cout<<"Длина вектора = "<<size[n]<<":\n";
for (i=0; i<size[n]; i++)//вывод неупорядоченного вектора
{
a[i]=rand() % 4000 + 1000;//генерирует числа от 1000 до 5000
if (i % 10 == 0)//в одной строке 10 чисел
cout<<endl;
cout<<setw(7)<<a[i];
}
getch();
cout<<endl;
cout<<"Сортировка вектора длиной "<<size[n]<<":\n";
start_time=clock();//запуск таймера - фиксируем начальное время
BSort(0, size[n]-1);
end_time=clock();//фиксируем конечное время
for (int i=0; i<size[n]; i++)//вывод отсортированного вектора
{
if (i % 10 == 0)
cout<<endl;
cout<<setw(7)<<a[i];
}
search_time=end_time - start_time;//расчет времени работы алгоритма
result[n][1]=search_time;//второй столбец - затраченное время (в миллисекундах)
getch();
cout<<endl;
}
cout<<endl<<"Время работы алгоритма:"<<endl;
for (i=0; i<12; i++)//вывод результатов
{
cout<<endl;
for (j=0; j<2; j++)
cout<<setw(8)<<result[i][j]<<" ";
}
}
void Sort3()
{
int mas[1000];//сортируемый вектор
int size[12]={25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};//размер вектора
int result[12][2];//массив результатов
int i, j, n, key;
int start_time, end_time, search_time;//начальное, конечное и искомое время
srand(time(NULL));//для рандома
for (n=0; n<12; n++)//перебирает все размеры вектора
{
result[n][0]=size[n];//первый столбец - размер сортируемого вектора
cout<<endl;
cout<<"Длина вектора = "<<size[n]<<":\n";
for (i=0; i<size[n]; i++)//вывод неупорядоченного вектора
{
mas[i]=rand() % 4000 + 1000;//генерирует числа от 1000 до 5000
if (i % 10 == 0)//в одной строке 10 чисел(чтоб красиво было)
cout<<endl;
cout<<setw(7)<<mas[i];
}
getch();
cout<<endl;
cout<<"Сортировка вектора длиной "<<size[n]<<":\n";
start_time=clock();//запуск таймера - фиксируем начальное время
for (int i=0; i<size[n]; i++)
{
int min=i; //минимальный элемент на промежутке индексов [i; size[k]]
for (int j=i+1; j<size[n]; j++)
{
Sleep(1);
if (mas[j] < mas[min])
min=j;
}
swap (mas[i], mas[min]);
}
end_time=clock();//фиксируем конечное время
for (int i=0; i<size[n]; i++)//вывод отсортированного вектора
{
if (i % 10 == 0)
cout<<endl;
cout<<setw(7)<<mas[i];
}
search_time=end_time - start_time; //времени работы алгоритма
result[n][1]=search_time; // затраченное время (в миллисекундах)
getch();
cout<<endl;
}
cout<<endl<<"Время работы алгоритма:"<<endl;
for (i=0; i<12; i++)//вывод результатов
{
cout<<endl;
for (j=0; j<2; j++)
cout<<setw(8)<<result[i][j]<<" ";
}
}
void main()
{
setlocale(LC_ALL,"Russian");
char key1='0';
cout<<"МЕНЮ:"<<endl;
cout<<"1 - Пузырьковая сортировка"<<endl;
cout<<"2 - Быстрая сортировка"<<endl;
cout<<"3 - Сортировка выбором"<<endl;
while(key1!='27')
{
key1=getch();
switch(key1)
{
case '1':Sort1();break;
case '2':Sort2();break;
case '3':Sort3();break;
}
}
_getch();
}