Консультация № 189191
14.04.2016, 14:43
0.00 руб.
0 0 0
Здравствуйте! Прошу помощи в следующем вопросе:
Задание:
1. Сравнить эффективность прямых методов сортировки (число сравнений и обменов) для числовых массивов, содержащих различное число элементов (20, 500, 1000, 3000, 5000, 10000), выбираемых случайным образом. Для 20 элементов предусмотреть ввод с клавиатуры. Оценить время сортировки, построить соответствующие таблицы.
2. Исследовать влияние начальной упорядоченности массива (уже отсортированный, отсортированный в обратном порядке, частично отсортированный – при разных размерах отсортированной части).
3. Сравнить эффективность быстрой сортировки и прямых методов. Определить размеры массивов, когда прямые методы эффективнее. Составить таблицы, иллюстрирующие сделанные выводы.


Вот код:
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string>
#include <time.h>
#include <memory>

using namespace std;

class Sorts;
class Arrays
{
public:

int Arr_size;
//int* Array = new int[Arr_size];
//int* CloneArr = new int[Arr_size];
int Array[100000];
int CloneArr[100000];

Arrays()
{
Arr_size = 0;
}

Arrays(int sz)
{
SetSize(sz);
}
void SetSize(int sz)
{
Arr_size = sz;
}
int GetSize()
{
return Arr_size;
}

void GenerateArr(int dispers)
{

srand(time(NULL));
for (int i = 0; i < Arr_size; i++)
{
Array[i] = rand() % dispers;
}

}
void ShowArr(int arr[])
{
for (int i = 0; i < Arr_size; i++)
cout << arr[i] << " ";

cout << endl << endl;
}

void CopyArr()
{
for (int i = 0; i < Arr_size; i++)
CloneArr[i] = Array[i];
}

friend Sorts;
};

class Sorts
{
public:

int count_compar, count_mov;
int time;
string SortName;
Sorts()
{
count_compar = 0, count_mov = 0, time = 0;
}

void Bubble(Arrays &obj)
{
int buf = 0;
time = clock();


for (int i = 1; i < obj.Arr_size; i++)
for (int j = obj.Arr_size - 1; j >= i; j--)
{
if (obj.CloneArr[j - 1] > obj.CloneArr[j])
{
buf = (obj.CloneArr[j - 1]);
obj.CloneArr[j - 1] = obj.CloneArr[j];
obj.CloneArr[j] = buf;
count_mov += 1;
}
count_compar += 1;
}
SortName = "Сортировка пузырьком";
cout << SortName << endl << "Перемещений " << count_mov << endl << "Сравнений " << count_compar << endl;
cout << "Время " << clock() - time << "ms" << endl << endl;
}

void Include(Arrays &obj)
{
int buf = 0, j = 0;
time = clock();
for (int i = 1; i < obj.Arr_size; i++)
{
buf = obj.CloneArr[i];
j = i - 1;
while ((buf < obj.CloneArr[j]) && (j >= 1))
{
obj.CloneArr[j + 1] = obj.CloneArr[j];
j--;
count_mov += 1;
}
count_compar += 1;
obj.CloneArr[j + 1] = buf;
}


SortName = "Сортировка включением";
cout << SortName << endl << "Перемещений " << count_mov << endl << "Сравнений " << count_compar << endl;
cout << "Время " << clock() - time << "ms" << endl << endl;
}

void Select(Arrays &obj)
{
int buf = 0, k = 0;
time = clock();

for (int i = 0; i < obj.Arr_size - 1; i++)
{
buf = obj.CloneArr[i];
k = i;
for (int j = i + 1; j < obj.Arr_size; j++)
{
if (obj.CloneArr[j] < buf)
{
k = j;
buf = obj.CloneArr[j];
count_mov += 1;
}
count_compar += 1;
}
obj.CloneArr[k] = obj.CloneArr[i];
obj.CloneArr[i] = buf;
}

SortName = "Сортировка Выбором";
cout << SortName << endl << "Перемещений " << count_mov << endl << "Сравнений " << count_compar << endl;
cout << "Время " << clock() - time << "ms" << endl << endl;
}

void quickSort(Arrays &obj, int l, int r)
{
time = clock();
int buf = obj.CloneArr[l + (r - l) / 2];
int i = l;
int j = r;

while (i <= j)
{
while (obj.CloneArr[i] < buf) i++;
while (obj.CloneArr[j] > buf) j--;
if (i <= j)
{
count_mov += 1;
swap(obj.CloneArr[i], obj.CloneArr[j]);
i++;
j--;
}
count_compar += 1;
}

if (i < r)
quickSort(*&obj, i, r);
else
if (l < j)
quickSort(*&obj, l, j);
else
{

SortName = "Быстрая сортировка";
cout << SortName << endl << "Перемещений " << count_mov << endl << "Сравнений " << count_compar << endl;
cout << "Время " << clock() - time << "ms" << endl << endl;

}
}


};



int main()
{
setlocale(LC_ALL, "Russian");

Arrays arrays;
Sorts sorts;

int Size, Dispers;
cout << "Размер = "; cin >> Size;
cout << "Дисперсия = "; cin >> Dispers;

arrays.SetSize(Size);

arrays.GenerateArr(Dispers);
//arrays.ShowArr(arrays.Array);

arrays.CopyArr();
sorts.Bubble(arrays);
//arrays.ShowArr(arrays.CloneArr);

arrays.CopyArr();
sorts.Include(arrays);
//arrays.ShowArr(arrays.CloneArr);

arrays.CopyArr();
sorts.Select(arrays);


arrays.CopyArr();
sorts.quickSort(arrays, 0, arrays.Arr_size - 1);

system("pause");

return 0;
}


можете подписать каждую ф-цию? кто за что отвечает так сказать...

Обсуждение

Форма ответа