#include "Insert.h";
#include "QuickSort.h";
#include "QuickSortLeft.h";
#include "QuickSort3.h";
#include "QuickSort4.h";
#include "Timer.h";
#include "RandomGenerator.h";
int main()
{
srand( (unsigned)time(NULL));
// Начальный массив, нужен лишь для инициализации
int* _x;
// Количество размерностей массивов
const int sizeNum = 5;
int sizes[sizeNum] = {4000, 8000, 10000, 15000, 20000};
// Количество видов сортировок
const int sortTypeNum = 4;
// Инициируем различные виды быстрой сортировки
QuickSort QSortCenterObj(0, _x);
QuickSortLeft QSortLeftObj(0, _x);
QuickSort3 QSort3Obj(0, _x);
QuickSort4 QSort4Obj(0, _x, 10);
// Им будем подсчитывать время
Timer timerObj(sortTypeNum);
Sort* sorts[sortTypeNum];
sorts[0] =& QSortCenterObj;
sorts[1] =& QSortLeftObj;
sorts[2] =& QSort3Obj;
sorts[3] =& QSort4Obj;
// Цикл по 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;
}