Advertisement
Guest User

z2d20m5

a guest
May 20th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. using namespace std;
  4.  
  5. int bin_search(int *a, int key, int left, int right)
  6. {
  7.     int mid = left + (right - left) / 2;
  8.    
  9.     if (left >= right)
  10.         return 0; // -(1 + left);
  11.    
  12.     if (a[mid] == key)
  13.         return mid + 1; // a[mid];
  14.    
  15.     else if (a[mid] > key)
  16.         return bin_search(a, key, left, mid);
  17.     else
  18.         return bin_search(a, key, mid + 1, right);
  19. }
  20.  
  21. int* Merge(int *a1, int n1, int *a2, int n2)
  22. {
  23.     int *a = new int[n1 + n2];
  24.     int i1 = 0, i2 = 0;
  25.     while (i1 < n1 && i2 < n2)
  26.     {
  27.         if (a1[i1] < a2[i2])
  28.         {
  29.             a[i1 + i2] = a1[i1];
  30.             ++i1;
  31.         }
  32.         else
  33.         {
  34.             a[i1 + i2] = a2[i2];
  35.             ++i2;
  36.         }
  37.     }
  38.     for (; i1 < n1; ++i1)
  39.         a[i1 + i2] = a1[i1];
  40.     for (; i2 < n2; ++i2)
  41.         a[i1 + i2] = a2[i2];
  42.     return a;
  43. }
  44.  
  45. void MergeSort(int *a, int n)
  46. {
  47.     if (n < 2)
  48.         return;
  49.     int n1 = n >> 1, n2 = n - n1;
  50.     int *a1 = new int[n1];
  51.     int *a2 = new int[n2];
  52.     for (int i = 0; i < n1; ++i)
  53.         a1[i] = a[i];
  54.     for (int i = 0; i < n2; ++i)
  55.         a2[i] = a[n1 + i];
  56.     MergeSort(a1, n1);
  57.     MergeSort(a2, n2);
  58.     delete[] a;
  59.     a = Merge(a1, n1, a2, n2);
  60.     delete[] a1;
  61.     delete[] a2;
  62. }
  63.  
  64. int main(int argc, const char * argv[]) {
  65.     srand(time(0));
  66.     int n, k;
  67.     cout << "n: ";
  68.     cin >> n;
  69.     cout << "k: ";
  70.     cin >> k;
  71.     int *arr = new int[n];
  72.     int *brr = new int[k];
  73.     for ( int i = 0; i < n; ++i)
  74.         arr[i] = rand() % 10 + 1;
  75.     MergeSort(arr, n);
  76.     cout << "arr: ";
  77.     for ( int i = 0; i < n; ++i)
  78.         cout << arr[i] << " ";
  79.     cout << endl << "fill in brr: ";
  80.     for ( int i = 0; i < k; ++i)
  81.         cin >> brr[i];
  82.     MergeSort(brr, k);
  83.     for (int i = 0; i < k; ++i) {
  84.         cout << bin_search(arr, brr[i], 0, n) << endl;
  85.     }
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement