ValerianBenchea

DIVIDE ET IMPERA Sortarea unui vector prin interclasare

Nov 21st, 2021 (edited)
1,081
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. int v[101], n;
  4. void imbin(int st, int dr)
  5. {
  6.     //zone(v[st]...V[m]) reunit (v[m+1]...v[dr])
  7.     int i, j, loc=0, aux[101];
  8.     int m=(st+dr)/2;
  9.     i=st;
  10.     j=m+1;
  11.     while(i<=m && j<=dr)
  12.     {
  13.         if(v[i]<v[j])
  14.         {
  15.             loc++;
  16.             aux[loc]=v[i];
  17.             i++;
  18.         }
  19.         else
  20.         {
  21.             loc++;
  22.             aux[loc]=v[j];
  23.             j++;
  24.         }
  25.     }
  26.     while(i<=m)
  27.         aux[++loc]=v[i++];
  28.     while(j<=dr)
  29.         aux[++loc]=v[j++];
  30.     loc=1;
  31.     for(i=st; i<=dr; i++)
  32.     {
  33.         v[i]=aux[loc];
  34.         loc++;
  35.     }
  36. }
  37.  
  38. void f(int st, int dr)
  39. {
  40.     int m=(st+dr)/2;
  41.     if(st<dr)
  42.     {
  43.         f(st, m);
  44.         f(m+1, dr);
  45.         imbin(st, dr);
  46.     }
  47. }
  48.  
  49. int main()
  50. {
  51.     cin>>n;
  52.     for(int i=1; i<=n; i++)
  53.         cin>>v[i];
  54.     f(1, n);
  55.     for(int i=1; i<=n; i++)
  56.         cout<<v[i]<<" ";
  57.     return 0;
  58. }
  59. /*71 23 4 15 2 1 60 12*/
Add Comment
Please, Sign In to add comment