Advertisement
icatalin

Sortari si cautari ASD

Jan 1st, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. ifstream f("date.in");
  7. ofstream g("date.out");
  8.  
  9.  
  10. void read(int *v, int n)
  11. {
  12.     int i;
  13.  
  14.     for (i = 0; i < n; i++)
  15.         f>>v[i];
  16. }
  17.  
  18. void display(int *v, int n)
  19. {
  20.     for (int i = 0; i < n; i++)
  21.         g<<v[i]<<" ";
  22. }
  23.  
  24. void insertionSort(int *v, int n)
  25. {
  26.     int i, j, key;
  27.  
  28.     for (i = 1; i < n; i++)
  29.     {
  30.         key = v[i];
  31.         j = i - 1;
  32.  
  33.         while (j >= 0 && key < v[j])
  34.         {
  35.             v[j + 1] = v[j];
  36.             j--;
  37.         }
  38.  
  39.         v[j + 1] = key;
  40.     }
  41. }
  42.  
  43. void selectionSort(int *v, int n)
  44. {
  45.     int i, j, minPos;
  46.  
  47.     for (i = 0; i < n - 1; i++)
  48.     {
  49.         minPos = i;
  50.  
  51.         for (j = i + 1; j < n; j++)
  52.             if (v[j] < v[minPos])
  53.                 minPos = j;
  54.         swap (v[minPos],v[i]);
  55.     }
  56. }
  57.  
  58. void bubbleSort(int *v, int n)
  59. {
  60.     int i, j;
  61.     bool flag = true;
  62.  
  63.  
  64.     for (i = 0; i < n - 1; i++)
  65.     {
  66.         if (flag == false) break;
  67.         flag = false;
  68.  
  69.         for (j = 0; j < n - i - 1; j++)
  70.             if (v[j] > v[j + 1])
  71.              {
  72.                  swap(v[j], v[j+1]);
  73.                  flag = true;
  74.              }
  75.     }
  76. }
  77.  
  78. void merge(int *v, int p, int m, int q)
  79. {   //interclaseaza vectorii sortati v[p..m] si v[m+1...q]
  80.     int i = p, j = m + 1, k = 0; // i pentru [p...m], j pentru [m+1...q], k pentru noul vector
  81.     int b[100]; //vector auxiliar in care retin temporar rezultatul interclasarii
  82.  
  83.     while (i <= m && j <= q)
  84.         if (v[i] < v[j])
  85.             b[k++] = v[i++];
  86.         else
  87.             b[k++] = v[j++];
  88.     // din cele 2 while-uri, se va intra doar intr-unul
  89.     while (i <= m) b[k++] = v[i++];
  90.     while (j <= q) b[k++] = v[j++];
  91.  
  92.     for (i = p; i <= q; i++) //transfer rezultatul interclasarii in vectorul original
  93.         v[i] = b[i - p];
  94. }
  95.  
  96. void mergeSort(int *v, int p, int q)
  97. {   //sorteaza elementele v[p] ... v[q]
  98.     if (q > p)
  99.     {
  100.         int m = (p + q) / 2;
  101.         mergeSort(v, p, m);
  102.         mergeSort(v, m+1, q);
  103.         merge(v, p, m, q);
  104.     }
  105. }
  106.  
  107. int binarySearch(int v[], int l, int r, int x) //vectorul trebuie sortat crescator!!!
  108. {
  109.     if (l > r) return -1; //spatiul de cautare e vid
  110.  
  111.     int m = (l + r)/2;
  112.  
  113.     if (x == v[m])
  114.         return m;
  115.  
  116.     if (x < v[m]) //elementul se afla in stanga
  117.         return binarySearch(v, l, m - 1, x);
  118.  
  119.     return binarySearch(v, m + 1, r, x); //elementul se poate afla numai in dreapta
  120. }
  121.  
  122. int main()
  123. {
  124.  
  125.     int v[100], n;
  126.     f>>n;
  127.  
  128.     read(v,n);
  129.     bubbleSort(v,n);
  130.     cout<<binarySearch(v,0,n-1,3);
  131.  
  132.     display(v,n);
  133.  
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement