Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <stdio.h>
- #include "sort.h"
- int main()
- {
- setlocale(LC_ALL, "Russian");
- clock_t start, end;
- int number;
- std::cout << "Enter number: ";
- std::cin >> number;
- int* mas_vozr = new int[number];
- for (int i = 0; i < number; i++)
- {
- mas_vozr[i] = i;
- }
- int* mas_yb = new int[number];
- for (int i = 0; i<number; i++)
- {
- mas_yb[i] = number-i-1;
- }
- int* mas_rand = new int[number];
- for (int i = 0; i < number; i++)
- {
- mas_rand[i] = rand() % 50;
- }
- int* arr = new int[number];
- int* arr1 = new int[number];
- int* arr2 = new int[number];
- char ex = 'n';
- do {
- char sort;
- std::cout << "Enter 'v' for increased array..." << std::endl << "Enter 'y' for decreased array..." << std::endl << "Enter 'r' for random array...";
- std::cin >> sort;
- switch (sort) {
- case 'v'://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr[i] = mas_vozr[i];
- std::cout << arr[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- vstavka(arr, number);
- end = clock();
- std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr1[i] = mas_vozr[i];
- std::cout << arr1[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- shaker(arr1, 1, number);
- end = clock();
- std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr1[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr2[i] = mas_vozr[i];
- std::cout << arr2[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- simple_decision(arr2, number);
- end = clock();
- std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr2[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- break;
- case 'y': /////////////////////////////////////////////////////////////////////////////////////////////////////
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr[i] = mas_yb[i];
- std::cout << arr[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- vstavka(arr, number);
- end = clock();
- std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr1[i] = mas_yb[i];
- std::cout << arr1[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- shaker(arr1, 1, number);
- end = clock();
- std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr1[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr2[i] = mas_yb[i];
- std::cout << arr2[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- simple_decision(arr2, number);
- end = clock();
- std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr2[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- break;
- case 'r'://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr[i] = mas_rand[i];
- std::cout << arr[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- vstavka(arr, number);
- end = clock();
- std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr1[i] = mas_rand[i];
- std::cout << arr1[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- shaker(arr1, 1, number);
- end = clock();
- std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr1[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr2[i] = mas_rand[i];
- std::cout << arr2[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- // Цикл сортировки из большого числа проходов.
- start = clock();
- simple_decision(arr2, number);
- end = clock();
- std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr2[i] << " ";
- }
- std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
- break;
- default:
- std::cout << "Error..." << std::endl;
- break;
- }
- std::cout << "Если вы хотите выйти, нажмите \'u\', в противном случае-любую другую клавишу" << std::endl;
- std::cin.ignore(100, '\n');
- std::cin >> ex;
- } while (ex != 'u');
- return 0;
- }
- swap.h
- #ifndef SWAP_H_
- #define SWAP_H_
- void swap(int* a, int* b);
- #endif
- swap.cpp
- #include "swap.h"
- void swap(int* a, int* b)
- {
- int temp = *a;
- *a = *b;
- *b = temp;
- }
- sort.h
- #ifndef SORT_H_
- #define SORT_H_
- void vstavka(int* mas, int n);
- void shaker(int* mas, int start, int N);
- void simple_decision(int* mas, int length);
- #endif
- sort.cpp
- #include "sort.h"
- #include "swap.h"
- #include <iostream>
- void vstavka(int* mas, int n)
- {
- for (int i = 1; i < n; i++)
- {
- for (int j = i; (j > 0) && (mas[j - 1] > mas[j]); j--)
- {
- swap(&mas[j - 1], &mas[j]);
- }
- }
- }
- void shaker(int* mas, int start, int N)
- {
- int l, r, i;
- l = start;
- r = N - 1;
- while (l <= r)
- {
- for (i = r; i >= l; i--)
- {
- if (mas[i - 1] > mas[i])
- {
- swap(&mas[i], &mas[i - 1]);
- }
- }
- l++;
- for (i = l; i <= r; i++)
- {
- if (mas[i - 1] > mas[i])
- {
- swap(&mas[i], &mas[i - 1]);
- }
- }
- r--;
- }
- }
- void simple_decision(int* mas, int length)
- {
- // Перебираем каждый элемент массива (кроме последнего, он уже будет отсортирован к тому времени, когда мы до него доберемся)
- for (int startIndex = 0; startIndex < length - 1; ++startIndex)
- {
- // В переменной smallestIndex хранится индекс наименьшего значения, которое мы нашли в этой итерации.
- // Начинаем с того, что наименьший элемент в этой итерации - это первый элемент (индекс 0)
- int smallestIndex = startIndex;
- // Затем ищем элемент поменьше в остальной части массива
- for (int currentIndex = startIndex + 1; currentIndex < length; ++currentIndex)
- {
- // Если мы нашли элемент, который меньше нашего наименьшего элемента,
- if (mas[currentIndex] < mas[smallestIndex])
- // то запоминаем его
- smallestIndex = currentIndex;
- }
- // smallestIndex теперь наименьший элемент.
- // Меняем местами наше начальное наименьшее число с тем, которое мы обнаружили
- swap(&mas[startIndex], &mas[smallestIndex]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement