Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Лабораторная работа 1
- // Модели и структуры данных
- // Выполнил студент 525а гр
- // Голованов Дмитрий
- // 4 вариант
- #include "stdafx.h"
- #include <iostream>
- #include <locale.h>
- #include <time.h>
- #include <algorithm>
- using namespace std;
- #define MIN_EL 100 // {100, 300}
- #define MAX_EL 300 //
- #define MAX 100
- int mass_max, mass_min,
- mass[MAX], // массив чисел
- mass_size, // размерность массива
- mass_view=0, // вид массива
- mass_sort=0, // метод сортировки
- compare_num = 0, // сравнения
- change_num = 0; // обмены
- void BubbleSort(int a); // Метод Пузырька
- void SimpleSelect(int a); // Метод простой сортировки
- void mass_gen(int a, int type); // type - качество массива a - размерность массива
- int i, j; // счетчики
- void mass_show(int a); // вывод массива
- void info_show(int a, int b, int c); // Вывод параметров сортировки
- int main()
- {
- srand((unsigned)time(NULL));
- setlocale(LC_ALL, "RUS");
- cout << " Введите размерность массива: ";
- cin >> mass_size;
- info_show(mass_size, mass_view, mass_sort); // вывод введенных параметров
- cout << "\n Выберите вид массива:" << endl;
- cout << " 1. Ввести вручную" << endl;
- cout << " 2. Упорядоченный по возрастанию" << endl;
- cout << " 3. Упорядоченный по убыванию" << endl;
- cout << " 4. Случайные числа" << endl;
- cout << " Вид: ";
- cin >> mass_view;
- mass_gen(mass_size, mass_view);// Заполнение массива
- reset:
- info_show(mass_size, mass_view, mass_sort); // вывод введенных параметров
- cout << " Массив: ";
- mass_show(mass_size);// вывод массива
- cout << endl << endl;
- cout << " Тип сортировки:" << endl;
- cout << " 1. Метод Пузырька" << endl;
- cout << " 2. Метод простого выбора" << endl;
- cout << " Тип: ";
- cin >> mass_sort;
- info_show(mass_size, mass_view, mass_sort); // вывод введенных параметров
- cout << endl;
- switch (mass_sort)
- {
- case 1:
- BubbleSort(mass_size); break; // Пузырёк
- case 2:
- SimpleSelect(mass_size); break;// Простой обмен
- default:
- goto reset;
- }
- cout << "\n Отсортированный массив: ";
- for (size_t b = 0; b < mass_size; b++)//отсортированный массив
- {
- cout << mass[b] << " ";
- }
- cout << "\n Cравнения: " << compare_num << endl;
- cout << " Обмены: " << change_num << endl;
- cout << " Операций: " << compare_num + change_num << endl; // вывод общего кол-ва операций
- system("pause");
- return 0;
- }
- void mass_gen(int a, int type)
- {
- // Случайная генерация массива
- for (i = 0; i<a; i++)
- {
- mass[i] = rand() % (MAX_EL - MIN_EL) + MIN_EL;
- }
- switch (type)
- {
- // Ввести массив вручную
- case 1:
- system("cls");
- for (i = 0; i < a; i++)
- {
- cout << " " << i + 1 << "-й элемент: ";
- cin >> mass[i];
- }
- break;
- // Упорядочить по возрастанию
- case 2:
- for (int i = 0; i < a - 1; i++)
- {
- mass_min = mass[i];
- for (int j = i + 1; j < a; j++)
- {
- if (mass_min > mass[j])
- {
- mass_min = mass[j];
- mass[j] = mass[i];
- mass[i] = mass_min;
- }
- }
- }
- break;
- // Упорядочить по убыванию
- case 3:
- for (int i = 0; i < a - 1; i++)
- {
- mass_max = mass[i];
- for (int j = i + 1; j < a; j++)
- {
- if (mass_max < mass[j])
- {
- mass[i] = mass[j];
- mass[j] = mass_max;
- mass_max = mass[i];
- }
- }
- }
- break;
- case 4:break;
- default:
- cout << "Ошибка ввода!" << endl;
- break;
- }
- }
- void SimpleSelect(int a)
- {
- int c,
- tmp = 0;
- cout << " 0| ";
- mass_show(a);
- for (int i = 0; i < a - 1; ++i)
- {
- c = i;
- tmp = mass[i];
- for (int j = i + 1; j < a; ++j)
- {
- compare_num++;
- if (mass[j] < tmp) // выбор максимального элемента
- {
- c = j; // индекс максимального элемента
- tmp = mass[j]; // максимальный элемент
- }
- }
- mass[c] = mass[i];
- mass[i] = tmp;
- change_num++;
- cout<<" " << i << "| "; // вывод массива после каждого шага сортировки
- mass_show(a);
- }
- }
- void BubbleSort(int a)
- {
- int tmp;
- cout << " 0| ";
- mass_show(a);
- for (int i = 1; i < a; ++i)
- {
- for (int j = a - 1; j >= i; --j)
- {
- compare_num++;
- if (mass[j - 1] > mass[j])// сравнение
- { // обмен
- change_num++;
- tmp = mass[j - 1];
- mass[j - 1] = mass[j];
- mass[j] = tmp;
- }
- }
- cout <<" "<< i << "| ";// вывод массива после каждого шага сортировки
- mass_show(a);
- }
- }
- void mass_show(int a) {
- for (int k = 0; k < a; k++)
- {
- cout << mass[k] << " ";
- }
- cout << endl;
- }
- void info_show(int a, int b, int c) {
- system("cls");
- cout << " Размер: " << a << endl;
- if (b>0&&b<5) {
- cout << " Вид: ";
- switch (b) {
- case 1: cout << "Введен вручную"; break;
- case 2: cout << "Числа по возрастанию"; break;
- case 3: cout << "Числа по убыванию"; break;
- case 4: cout << "Случайные числа"; break;
- }
- cout << endl;
- }
- if (c>0&&c<3) {
- cout << " Метод: ";
- switch (c) {
- case 1: cout << "Пузырёк"; break;
- case 2: cout << "Простой выбор"; break;
- }
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement