#include "Insert.h";
#include "Select.h";
#include "ShellSortSedj1.h";
#include "QuickSort.h";
#include "BubbleSort.h";
#include "ShakerSort.h";
#include "PyramidSort.h";
#include "Timer.h";
#include "RandomGenerator.h";
int main()
{
srand( (unsigned)time(NULL));
// Начальный массив, нужен лишь для инициализации
int* _x;
// Количество размерностей массивов
const int sizeNum = 13;
int sizes[sizeNum] =
{10, 50, 100, 400, 800, 1000, 4000, 8000, 10000, 12000, 15000, 18000, 20000};
// Количество видов сортировок
const int sortTypeNum = 7;
// Инициируем требуемые виды сортировок
QuickSort quickSortObj(0, _x);
PyramidSort pyramidSortObj(0, _x);
ShellSortSedj1 shellSortSedj1Obj(10000, _x, 100);
ShakerSort shakerSortObj(0, _x);
Insert insertObj(0, _x);
Select selectObj(0, _x);
BubbleSort bubbleSortObj(0, _x);
// Им будем подсчитывать время
Timer timerObj(sortTypeNum);
Sort* sorts[sortTypeNum];
sorts[0] =& quickSortObj;
sorts[1] =& pyramidSortObj;
sorts[2] =& shellSortSedj1Obj;
sorts[3] =& shakerSortObj;
sorts[4] =& insertObj;
sorts[5] =& selectObj;
sorts[6] =& bubbleSortObj;
// Цикл по 2 режимам состава массивов:
// случайные / частично-отсортированные числа
for (int k = 0; k < 2; k++) {
if (0 == k
) cout <<
"I. Random Numbers";
else cout <<
"II. PARTLY Random Numbers";
// Цикл по размерам массива
for (int i = 0; i < sizeNum; i++) {
cout <<
" " << i +
1 <<
") Array Size(N): " << sizes
[i
] <<
"\n";
// ... по видам сортировок
for (int j = 0; j < sortTypeNum; j++) {
int N = sizes[i];
int* x = new int[N];
RandomGenerator genObj(N);
// В зависимости от режима - заполняем исходный массив
if (0 == k) x = genObj.GetRandom(0, 100);
else x = genObj.GetPartSorted(N/10, N/5);
// Уточняем размер и передаем исходный сформированный массив
sorts[j]->setSize(N);
sorts[j]->setArr(x);
// Засекаем время
timerObj.Start(0);
sorts[j]->Run(); // Прогоняем сортировку текущего вида
float exTime = timerObj.Get(0, 1); // Фиксируем время
// Выводим время выполнения и количество перестановок
cout.
setf(ios::
fixed | ios::
showpoint);
cout <<
" " << exTime <<
" sec.:: ";
cout << sorts
[j
]->getSwapNum
() <<
" swaps :: " << sorts
[j
]->getName
() <<
"\n";
delete [] x;
}
}
}
return 0;
}