HasanRasulov

merge_test.cpp

Dec 24th, 2019
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <climits>
  5. void printArray(int arr[], int size);
  6.  
  7. void merge(int *arr, int left, int mid, int right)
  8. {
  9.  
  10.     int left_size = mid - left + 1;
  11.     int right_size = right - mid;
  12.  
  13.     int left_sub_arr[left_size], right_sub_arr[right_size];
  14.  
  15.     for (int i = 0; i < left_size; left_sub_arr[i++] = arr[left + i])
  16.         ; //i bax
  17.  
  18.     for (int j = 0; j < right_size; right_sub_arr[j++] = arr[mid + 1 + j])
  19.         ; //je ye de bax
  20.  
  21.     int i = 0, j = 0, k = left;
  22.  
  23.     while (i < left_size && j < right_size)
  24.     {
  25.         if (left_sub_arr[i] <= right_sub_arr[j])
  26.  
  27.             arr[k] = left_sub_arr[i++];
  28.  
  29.         else
  30.  
  31.             arr[k] = right_sub_arr[j++];
  32.  
  33.         k++;
  34.     }
  35.  
  36.     while (i < left_size)
  37.  
  38.         arr[k++] = left_sub_arr[i++];
  39.  
  40.     while (j < right_size)
  41.  
  42.         arr[k++] = right_sub_arr[j++];
  43. }
  44.  
  45. void mergeSort(int *arr, int l, int r)
  46. {
  47.     if (l < r)
  48.     {
  49.  
  50.         int m = (l + r) / 2;
  51.  
  52.         mergeSort(arr, l, m);
  53.         mergeSort(arr, m + 1, r);
  54.  
  55.         merge(arr, l, m, r);
  56.     }
  57. }
  58.  
  59. void test_merge_sort(int size)
  60. {    
  61.     int *test = new int[size];
  62.  
  63.     srand(time(NULL));
  64.  
  65.     for (size_t i = 0; i < size; i++)
  66.     {
  67.         int r = rand() % USHRT_MAX;
  68.  
  69.         if (r % 9 == 0 || r % 31 == 0)
  70.             r *= -1;
  71.  
  72.         test[i] = r;
  73.     }
  74.  
  75.     std::cout<<"---------------------------------------------------------------------------------------\n";
  76.  
  77.     printArray(test, size);
  78.  
  79.     clock_t time=clock();
  80.  
  81.     mergeSort(test, 0, size - 1);
  82.  
  83.     time = clock() - time;
  84.  
  85.     std::cout<<"size:"<<size<<"\n";
  86.  
  87.     std::cout<<"time(sec):"<<(double)(double(time))/CLOCKS_PER_SEC<<"\n";
  88.  
  89.     printArray(test, size);
  90.    
  91.     std::cout<<"---------------------------------------------------------------------------------------\n";
  92.  
  93.     delete[] test;
  94. }
  95.  
  96.  
  97.  
  98.  
  99. int main()
  100. {
  101.     int size = 20;
  102.  
  103.     test_merge_sort(size);
  104.  
  105.    
  106.  
  107.    
  108.  
  109.     return 0;
  110. }
  111.  
  112. void printArray(int arr[], int size)
  113. {
  114.     for (int i = 0; i < size; i++)
  115.         std::cout << arr[i] << " ";
  116.     std::cout << std::endl;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment