Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Создать класс Sort, который будет содержать в себе реализацию сортировок:
- 2)выбором;
- 4)быструю;
- Сравнить их работу на различных данных: полностью отсортированные,
- отсортированные в обратном порядке, частично отсортированные данные.
- */
- #include <iostream>
- #include <Windows.h>
- #include <fstream>
- #include <ctime>
- #include <algorithm>
- using namespace std;
- void create_array(int*, int);
- void output_array(int*, int);
- bool comp(int, int);//компаратор, для функции sort для сортировки в обратном порядке
- int compare1 = 0;
- int compare2 = 0;
- int replace1 = 0;
- int replace2 = 0;
- class Sort
- {
- private:
- int* arr;
- public:
- Sort(int* arr2)
- {
- arr = arr2;
- }
- void selection_sort(int size)
- {
- for (int i = 0; i < size - 1; i++)
- {
- int min = i;
- for (int j = i + 1; j < size; j++)
- {
- compare1++;
- if (arr[j] < arr[min])
- min = j;
- }
- if (min != i)
- {
- swap(arr[i], arr[min]);
- replace1++;
- }
- }
- }
- void quick_Sort(int* arr, int first, int last)
- {
- int mid;
- int f = first, l = last;
- mid = arr[(f + l) / 2]; //вычисление опорного элемента
- do
- {
- while (arr[f] < mid)
- {
- f++;
- compare2++;
- }
- while (arr[l] > mid)
- {
- l--;
- compare2++;
- }
- compare2 += 2;
- if (f <= l) //перестановка элементов
- {
- swap(arr[f], arr[l]);
- replace2++;
- f++;
- l--;
- }
- } while (f < l);
- if (first < l) quick_Sort(arr, first, l);
- if (f < last) quick_Sort(arr, f, last);
- }
- };
- int main()
- {
- SetConsoleOutputCP(1251);
- SetConsoleCP(1251);
- int q;
- do
- {
- int size;
- cout << "Введите размер массива:" << endl;
- cin >> size;
- int* arr1 = new int[size];
- int* arr2 = new int[size];
- create_array(arr1, size);
- cout << "Исходный массив:" << endl;
- output_array(arr1, size);
- for (int i = 0; i < size; i++)
- arr2[i] = arr1[i];
- Sort tmp(arr1);
- /////////////////////////////////////////////////////////////////////////
- sort(arr1, arr1 + size);
- cout << "Отсортированный массив:" << endl;
- output_array(arr1, size);
- tmp.selection_sort(size);
- cout << "Работа сортировки выбором на отсортированных данных:" << endl;
- output_array(arr1, size);
- tmp.quick_Sort(arr1, 0, size - 1);
- cout << "Работа быстрой сортировки на отсортированных данных:" << endl;
- output_array(arr1, size);
- cout << "В сортировке выбором сравнений: " << compare1 << ", перестановок: " << replace1 << endl;
- cout << "В быстрой сортировке сравнений: " << compare2 << ", перестановок: " << replace2 << endl;
- compare1 = compare2 = replace1 = replace2 = 0;
- /////////////////////////////////////////////////////////////////////////
- sort(arr1, arr1 + size, comp);
- cout << "\nОтсортированный в обратном порядке массив:" << endl;
- output_array(arr1, size);
- tmp.selection_sort(size);
- cout << "Работа сортировки выбором на отсортированных в обратном порядке данных:" << endl;
- output_array(arr1, size);
- sort(arr1, arr1 + size, comp);
- tmp.quick_Sort(arr1, 0, size - 1);
- cout << "Работа быстрой сортировки на отсортированных в обратном порядке данных:" << endl;
- output_array(arr1, size);
- cout << "В сортировке выбором сравнений: " << compare1 << ", перестановок: " << replace1 << endl;
- cout << "В быстрой сортировке сравнений: " << compare2 << ", перестановок: " << replace2 << endl;
- compare1 = compare2 = replace1 = replace2 = 0;
- /////////////////////////////////////////////////////////////////////////
- sort(arr2, arr2 + size / 2);
- cout << "\nМассив с частично отсортированными данными (половина):" << endl;
- output_array(arr2, size);
- for (int i = 0; i < size; i++)
- arr1[i] = arr2[i];
- tmp.selection_sort(size);
- cout << "Работа сортировки выбором на частично отсортированных данных:" << endl;
- output_array(arr1, size);
- tmp.quick_Sort(arr2, 0, size - 1);
- cout << "Работа быстрой сортировки на частично отсортированных данных:" << endl;
- output_array(arr2, size);
- cout << "В сортировке выбором сравнений: " << compare1 << ", перестановок: " << replace1 << endl;
- cout << "В быстрой сортировке сравнений: " << compare2 << ", перестановок: " << replace2 << endl;
- cout << "\n0. Выход" << endl;
- cin >> q;
- } while (q != 0);
- }
- void create_array(int* arr, int size)
- {
- fstream file_1;
- file_1.open("MyFile", ios::out);
- srand(static_cast<int>(time(0)));
- for (int i = 0; i < size; i++)
- {
- file_1 << rand() % 100;
- file_1 << ' ';
- }
- file_1.close();
- file_1.open("MyFile", ios::in);
- for (int i = 0; i < size; i++)
- file_1 >> arr[i];
- file_1.close();
- }
- void output_array(int* arr, int size)
- {
- for (int i = 0; i < size; i++)
- {
- cout << arr[i] << '\t';
- if (!((i + 1) % 15))
- cout << endl;
- }
- cout << endl;
- }
- bool comp(int first, int second)
- {
- return first > second;
- }
Add Comment
Please, Sign In to add comment