vadimk772336

Untitled

Oct 7th, 2021
999
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. // Делает мерж [l,mid] and [mid+1,right] (т.е индексы надо указывать)
  4. void merge(int* array, int l, int mid, int r)
  5. {
  6.     int ls = 0, rs = 0;
  7.     int result[r - l + 1];
  8.  
  9.     while ((l + ls < mid + 1) && (mid + rs < r))
  10.     {
  11.         if (array[l + ls] < array[mid + rs + 1])
  12.         {
  13.             result[ls + rs] = array[l + ls];
  14.             ls++;
  15.         }
  16.         else
  17.         {
  18.             result[ls + rs] = array[mid + 1 + rs];
  19.             rs++;
  20.         }
  21.     }
  22.  
  23.     while (l + ls < mid + 1)
  24.     {
  25.         result[ls + rs] = array[l + ls];
  26.         ls++;
  27.     }
  28.  
  29.     while (mid + rs < r)
  30.     {
  31.         result[ls + rs] = array[mid + rs + 1];
  32.         rs++;
  33.     }
  34.  
  35.     for (int i = 0; i < ls + rs; ++i)
  36.         array[l + i] = result[i];
  37. }
  38.  
  39.  
  40. void printArray(int A[], int size)
  41. {
  42.     for (auto i = 0; i < size; i++)
  43.         std::cout << A[i] << " ";
  44. }
  45.  
  46. void mergeSortIterative(int* array, int n, int size)
  47. {
  48.     for (int i = size; i < n; i *= 2)
  49.     {
  50.         for (int j = 0; j < n - i; j += 2 * i)
  51.             merge(array, j, j + i - 1, std::min(j + 2 * i - 1, n));
  52.     }
  53. }          
  54.            
  55. int main()
  56. {
  57.  
  58.     //int arr[] = { 7, 7, 4, 5, 6, 7, 9, 3, 2, 5, 6, 7, 4, 2, 45, 7, 8, 9, 6, 3, 5, 6, 8, 7, 6, 5, 76,
  59.         //6, 8, 5, 43, 25, 6, 7, 7, 8, 9, 6, 5, 4, 3, 4, 56, 6, 56, 6, 43, 3, 68, 8, 6 };
  60.     //int size = 5;
  61.     //int arr[] = {1,3,5,7,9,2,4,6,8,10};  
  62.     //int arr[] = {1,4,2,8,3,7,5,6};
  63.     int arr[] = {2,1};
  64.     int size = 1;
  65.     auto arr_size = sizeof(arr) / sizeof(arr[0]);
  66.  
  67.     std::cout << "Given array is \n";
  68.     printArray(arr, arr_size);
  69.  
  70.     mergeSortIterative(arr, arr_size, size);
  71.     std::cout << "\nSorted array is \n";
  72.     printArray(arr, arr_size);
  73.     return 0;
  74. }
  75.  
Advertisement
Add Comment
Please, Sign In to add comment