Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <ctime>
  4. using namespace std;
  5.  
  6. void Sliyanie(vector<int> &a, size_t start, size_t end)
  7. {
  8. if (end - start < 2)
  9. return;
  10. if (end - start == 2)
  11. {
  12. if (a[start] > a[start + 1])
  13. swap(a[start], a[start + 1]);
  14. return;
  15. }
  16. //разделяем массив на две части
  17. Sliyanie(a, start, start + (end - start) / 2);//первая половина
  18. Sliyanie(a, start + (end - start) / 2, end);//вторая половина
  19. // в а лежат отсортированные половинки
  20. vector<int> b; //половинки в один массив
  21. size_t b1 = start; // начало первой половины
  22. size_t e1 = start + (end - start) / 2; //конец первой половины
  23. size_t b2 = e1; // начало второй половины
  24. while (b.size() < end - start) //перекидываем эл-ты массива а в b
  25. {
  26. if (b1 >= e1 || (b2 < end && a[b2] <= a[b1]))
  27. {
  28. b.push_back(a[b2]);
  29. ++b2;
  30. }
  31. else
  32. {
  33. b.push_back(a[b1]);
  34. ++b1;
  35. }
  36. }
  37. for (size_t i = start; i < end; ++i)
  38. a[i] = b[i - start];
  39. }
  40.  
  41. int main()
  42. {
  43. setlocale(LC_ALL,"rus");
  44. clock_t start;
  45. double duration;
  46. int N; cout << "Введите N: " << endl; cin >> N;
  47. vector<int> v(N);
  48. for (int i = 0; i < N; ++i)
  49. v[i]=rand()%N;
  50. for (auto i: v)
  51. cout << i << " ";
  52. cout << endl;
  53. start = clock();
  54. Sliyanie(v, 0, v.size());
  55. duration = (double)(clock()-start)/CLOCKS_PER_SEC;
  56. for (auto i: v)
  57. cout << i << " ";
  58. cout << endl;
  59. cout <<"Затраченное время: " << duration <<"сек."<<endl;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement