Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. #include <iostream>
  5. #include <fstream>
  6. #include <ctime>
  7.  
  8. using namespace std;
  9.  
  10. const int N = 100000; //Розмер массива
  11. ofstream file_out("output.txt"); //Открытие файла для записи.
  12.  
  13. void copy_array(int arr1[N], int arr2[N]); //Функция для копирования массива
  14. void bublesort(int arr[N]); //Функция для алгоритма быстрой сортировки
  15. void InsertSort(int arr[N]); //Функция для алгоритма сортировки вставками
  16. void QuickSort(int arr[N], int m, int n); //Функция для алгоритма быстрой сортировки
  17.  
  18. int main()
  19. {
  20.     setlocale(LC_ALL, "rus");
  21.     srand(time(NULL));
  22.     int arr[N]; //Исходный массив
  23.     int rand_array[N]; //Рандомный массив
  24.  
  25.     for (int i = 0; i < N; i++)
  26.         rand_array[i] = rand() % 10000 - 5000; //Генерация массива
  27.  
  28.     copy_array(arr, rand_array); //Копируем массив
  29.  
  30.     file_out << "array: ";
  31.     for (int i = 0; i < N; i++)
  32.         file_out << arr[i] << " "; //Вывод сгенерированного массива в файл
  33.     file_out << "\n\n\n";
  34.  
  35.     bublesort(arr); //Сортировка пузырьком
  36.     system("PAUSE"); //Пауза
  37.  
  38.     copy_array(arr, rand_array); //Копируем массив
  39.  
  40.     InsertSort(arr); //Сортировка вставками
  41.     system("PAUSE"); //Пауза
  42.  
  43.     copy_array(arr, rand_array); //Копируем массив
  44.  
  45.     cout << "Идет быстрая сортировка..... " << '\n'; //Начало быстрой сортировки
  46.     double time_start = clock(); //Включаем секундомер
  47.     QuickSort(arr, 0, N); //Быстрая сортировка
  48.     double time_finish = clock(); //Выключаем секундомер
  49.     file_out << "\n\nQuick Sort: ";
  50.     for (int i = 0; i < N; i++)
  51.         file_out << arr[i] << ' '; //Вывод отсоотированого массива
  52.  
  53.     double time_insert_sort = (time_finish - time_start) / 1000; //Время работы сортировки
  54.     printf("Время сортировки: %.2f\n", time_insert_sort); //Вывод времени
  55.     system("PAUSE"); //Пауза
  56.     return 0;
  57. }
  58.  
  59. void bublesort(int arr[N])
  60. {
  61.     cout << "Идет сотировка 'Пузырьком'..... " << '\n'; //Начало сортировки
  62.     double time_start = clock(); //Включаем секундомер
  63.     for (int i = 0; i < N - 1; i++) //Цыкл обхода
  64.     {
  65.         for (int j = 0; j < N - i - 1; j++)
  66.         {
  67.             if (arr[j] < arr[j + 1]) //Если правый больше левого меняем
  68.             {
  69.                 int dump = arr[j];
  70.                 arr[j] = arr[j + 1];
  71.                 arr[j + 1] = dump;
  72.             }
  73.         }
  74.     }
  75.     double time_finish = clock(); //Выключаем секундомер
  76.  
  77.     file_out << "Buble sort: ";
  78.     for (int i = 0; i < N; i++)
  79.         file_out << arr[i] << ' '; //Вывод отсортированого массива
  80.  
  81.     double time_buble_sort = (time_finish - time_start) / 1000; //Время работы алгоритма
  82.     printf("Время сортировки: %.2f\n", time_buble_sort); //Вывод времени работы
  83. }
  84.  
  85. void InsertSort(int arr[N])
  86. {
  87.     cout << "Идет сотировка вставками..... " << '\n'; //Начало сортировки
  88.     double time_start = clock(); //Включаем секундомер
  89.  
  90.     for (int i = 1; i < N; i++)
  91.     {
  92.         int key = arr[i]; //Ставим ключ
  93.         int j = i - 1; //До ключа
  94.         while (j >= 0 && arr[j] > key) //Если елемент до ключа больше ключа
  95.         {
  96.             arr[j+1] = arr[j];
  97.             j--;
  98.         }
  99.         arr[j + 1] = key; //Ставим значение ключа на новое место
  100.     }
  101.  
  102.     double time_finish = clock(); //Выключаем секундомер
  103.     file_out << "\n\nInserting sort: ";
  104.     for (int i = 0; i < N; i++)
  105.         file_out << arr[i] << ' '; //Выводи массив
  106.  
  107.     double time_insert_sort = (time_finish - time_start) / 1000; //Время работы алгоритма
  108.     printf("Время сортировки: %.2f\n", time_insert_sort); //Выводим время работы
  109. }
  110.  
  111. void QuickSort(int arr[N], int m, int n)
  112. {
  113.     int i = 0, j = n - 1; //Ставим значения
  114.     int temp, p; //Переменная для хранения и середина массива
  115.  
  116.     p = arr[n / 2]; //Значение середины
  117.  
  118.     do {
  119.         while (arr[i] < p) i++; //Ищем неправильные елементы
  120.         while (arr[j] > p) j--;
  121.  
  122.         if (j >= i) //Меняем местами два этих элемента
  123.         {
  124.             temp = arr[i];
  125.             arr[i] = arr[j];
  126.             arr[j] = temp;
  127.             i++; //продвигаем ключи
  128.             j--;
  129.         }
  130.     } while (i <= j); //Пока ключ конца больше или равен ключу начала
  131.  
  132.     if (i < n) QuickSort(arr, i, n-i); //Если есть что сортировать рекурсивно вызываем функцию
  133.     if (j > 0) QuickSort(arr, 0, j);
  134. }
  135.  
  136. void copy_array(int arr1[N], int arr2[N])
  137. {
  138.     for (int i = 0; i < N; i++)
  139.         arr1[i] = arr2[i]; //Копируем массивы
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement