C++. Реализовать программу, которая принимает ** вход количество элементов массива,...

0 голосов
66 просмотров

C++. Реализовать программу, которая принимает на вход количество элементов массива, выполняет генерацию 3 массивов отсортированных по возрастанию, по убыванию и случайным образом соответственно. Сортирует каждый из массивов используя сортировку "выбором". После выполнения выводит данные отчета по выполнению сортировки в формате: как отсортирован массив, время, занявшее на сортировку каждым из методов.


Информатика (94 баллов) | 66 просмотров
0

Исправлено

Дан 1 ответ
0 голосов
Правильный ответ

Не очень понятно, что означает "время, занявшее на сортировку каждым из методов" - метод в задании всего 1.

Программе нужно сказать количество элементов в массиве, после этого она выведет необходимую информацию. Если нужен вывод самих массивов, раскомментируйте соответствующие строки.

#include
#include
#include
#include
 
void selection_sort(int *arr, int n, std::string name)
{
    /*std::cout << "Неотсортированный массив " << name << std::endl;<br>    for (int i = 0; i < n; i++)
        std::cout << arr[i] << " ";<br>    std::cout << std::endl;*/<br>    std::clock_t c_start = std::clock();
    for (int i = 0; i < n - 1; i++)
    {
        int ind_min = i;
        for (int j = i + 1; j < n; j++)
            if (arr[j] < arr[ind_min]) ind_min = j;
        if (ind_min != i) {
            int t = arr[ind_min];
            arr[ind_min] = arr[i];
            arr[i] = t;
        }
    }
    std::clock_t c_end = std::clock();
    std::cout << "Отсортированный массив " << name << " (сортировка выбором)"<< std::endl;<br>    /*for (int i = 0; i < n; i++)
        std::cout << arr[i] << " ";<br>    std::cout << std::endl;*/<br>    float time = 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC;
    std::cout << "Времени затрачено: " << time << " мс" << std::endl;<br>}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int n;
    std::cout << "Число элементов массива: ";<br>    std::cin >> n;
    int *arr = new int[n];
    arr[0] = 0;
    for (int i = 1; i < n; i++)
        arr[i] = arr[i-1] + rand() % 3;
    selection_sort(arr, n, "[Отсортирован по возрастанию]");
    arr[0] = 10000;
    for (int i = 1; i < n; i++)
        arr[i] = arr[i-1] - rand() % 3;
    selection_sort(arr, n, "[Отсортирован по убыванию]");
    for (int i = 0; i < n; i++)
        arr[i] = rand() % 10000;
    selection_sort(arr, n, "[Случайный массив]");
    return 0;
}
Пример работы:
Число элементов массива: 30000
Отсортированный массив [Отсортирован по возрастанию] (сортировка выбором)
Времени затрачено: 1760 мс
Отсортированный массив [Отсортирован по убыванию] (сортировка выбором)
Времени затрачено: 2838 мс
Отсортированный массив [Случайный массив] (сортировка выбором)
Времени затрачено: 1789 мс

(148k баллов)
0

Программа выводит: Затрачено 0 мс

0

И так при любом количестве элементов в массиве