Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <chrono>
  5.  
  6. using namespace std;
  7. const int arr_size = 1000;
  8.  
  9. //функция, сливающая массивы
  10.  
  11. void Merge(int *A, int first, int last)
  12. {
  13.     int middle, start, final;
  14.     int *mas = new int[arr_size];
  15.  
  16.     middle = (first + last) / 2;                        //вычисление среднего элемента
  17.     start = first;                                      //начало левой части
  18.     final = middle + 1;                                 //начало правой части
  19.  
  20.     for (int j = first; j <= last; j++)                 //выполнять от начала до конца
  21.     {
  22.         if ((start <= middle) && ((final > last) || (A[start] < A[final])))
  23.         {
  24.             mas[j] = A[start];
  25.             start++;
  26.         }
  27.         else
  28.         {
  29.             mas[j] = A[final];
  30.             final++;
  31.         }
  32.     }
  33.  
  34.     //возвращение результата в список
  35.  
  36.     for (int j = first; j <= last; j++)
  37.     {
  38.         A[j] = mas[j];
  39.     }
  40.  
  41.     delete[]mas;
  42. };
  43.  
  44. //рекурсивная процедура сортировки
  45.  
  46. void merge_sort(int *A, int first, int last)
  47. {
  48.     {
  49.         if (first<last)
  50.         {
  51.             merge_sort(A, first, (first + last) / 2);   //сортировка левой части
  52.             merge_sort(A, (first + last) / 2 + 1, last); //сортировка правой части
  53.             Merge(A, first, last);                      //слияние двух частей
  54.         }
  55.     }
  56. };
  57.  
  58.  
  59.  
  60. void main()
  61. {
  62.  
  63.     int n = arr_size - 1;
  64.     int *arr = new int[arr_size];
  65.  
  66.  
  67.     for (int i = 1; i <= n; i++)
  68.     {
  69.         arr[i] = rand() % 1000;
  70.     }
  71.  
  72.     auto begin = std::chrono::steady_clock::now();
  73.  
  74.     merge_sort(arr, 0, n);                                  //вызов сортирующей процедуры
  75.  
  76.     auto end = std::chrono::steady_clock::now();
  77.  
  78.     cout << "After Sorting: ";                          //вывод упорядоченного массива
  79.  
  80.     for (int i = 1; i <= n; i++)
  81.     {
  82.         cout << arr[i] << "\n ";
  83.     }
  84.  
  85.     auto elapsed_ms = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
  86.  
  87.     cout << "The time: " << elapsed_ms.count() << " ns\n";
  88.  
  89.  
  90.     delete[] arr;
  91.     system("pause");
  92.  
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement