Advertisement
alexx876

Untitled

Dec 14th, 2018
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. void mergeSort(double *arr, size_t start, size_t end)
  7. {
  8.     //Если серия меньше двух, выходим из цикла
  9.     if (end - start < 2)
  10.         return;
  11.     //Если кол-во равно двум, то перемещаем их
  12.     if (end - start == 2)
  13.     {
  14.         if (arr[start] > arr[start + 1])
  15.             swap(arr[start], arr[start + 1]);
  16.         return;
  17.     }
  18.     //рекурсия функции
  19.     mergeSort(arr, start, start + (end - start) / 2);
  20.     //рекурсия функции
  21.     mergeSort(arr, start + (end - start) / 2, end);
  22.     //создаем массив, тип double
  23.     vector<double> b;
  24.     size_t b1 = start; //начальный элемент
  25.     size_t e1 = start + (end - start) / 2; //середина
  26.     size_t b2 = e1; //середина, копия
  27.    
  28.     //цикл по значениям
  29.     while (b.size() < end - start)
  30.     {
  31.         //Если значение b1 больше середины массива, или , b2 меньше конца и значение b2 меньше или равно  b1
  32.         //добавляем в b2, в ином случае в b1
  33.         if (b1 >= e1 || (b2 < end && arr[b2] <= arr[b1]))
  34.         {
  35.             b.push_back(arr[b2]);
  36.             ++b2;
  37.         }
  38.         else
  39.         {
  40.             b.push_back(arr[b1]);
  41.             ++b1;
  42.         }
  43.     }
  44.     //Цикл по массиву arr, ставим значение b
  45.     for (size_t i = start; i < end; ++i)
  46.         arr[i] = b[i - start];
  47. }
  48.  
  49. int main()
  50. {
  51.     setlocale(LC_ALL, "rus");
  52.     double n = 0, nap = 0;
  53.     cout << "¬ведите количество чисел: ";
  54.     cin >> n;
  55.     cout << "1) —ортировка по возрастанию"<<endl<<"2) —ортировка по убыванию "<<endl;
  56.     cin >> nap;
  57.     double *arr = new double[n];
  58.     double a;
  59.     cout << "¬ведите  числа: ";
  60.     for (int i = 0; i < n; i++) {
  61.         //cout << i << "-ое число: ";
  62.         cin >> arr[i];
  63.     }
  64.     cout << "»сходный массив: ";
  65.     for (int i = 0; i < n; i++) {
  66.         cout << arr[i] << " ";
  67.     }
  68.     cout << endl;
  69.     mergeSort(arr, 0, n);
  70.     cout << "ќтсортированный массив: ";
  71.     if (nap == 1) {
  72.         for (int i = 0; i < n; i++) {
  73.             cout << arr[i] << " ";
  74.         }
  75.     }
  76.     if (nap == 2) {
  77.         for (int i = n - 1; i >= 0; i--) {
  78.             cout << arr[i] << " ";
  79.         }
  80.     }
  81.     cout << endl;
  82.     system("pause");
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement