Advertisement
ithoran

Quick, Merge, Binary

Apr 11th, 2016
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. // Quick Sort
  2. int partition(int* niz, int d, int g) {
  3.     int zid = g;
  4.     int ind = d;
  5.     int pom;
  6.     for (int i = d; i < g; i++) {
  7.         if (niz[i] < niz[zid]) {
  8.             pom = niz[i];
  9.             niz[i] = niz[ind];
  10.             niz[ind] = pom;
  11.             ind++;
  12.         }
  13.     }
  14.     pom = niz[ind];
  15.     niz[ind] = niz[zid];
  16.     niz[zid] = pom;
  17.     return ind;
  18. }
  19.  
  20. void quickSort(int* niz, int poc, int kraj) {    // Unosi se indeksi niza (pocetak 0 kraj n - 1)
  21.     if (poc >= kraj) return;
  22.     int i = partition(niz, poc, kraj);
  23.     quickSort(niz, poc, i - 1);
  24.     quickSort(niz, i + 1, kraj);
  25. }
  26.  
  27. // Merge Sort
  28. void merge(int* niz, int L, int D, int* levi, int* desni) {
  29.     int nl = L;
  30.     int nd = D;
  31.     int i = 0, j = 0, k = 0;
  32.     while (i < nl && j < nd) {
  33.         if (levi[i] < desni[j]) {
  34.             niz[k] = levi[i];
  35.             i++;
  36.         }
  37.         else {
  38.             niz[k] = desni[j];
  39.             j++;
  40.         }
  41.         k++;
  42.     }
  43.     while (i < nl) {
  44.         niz[k] = levi[i];
  45.         k++;
  46.         i++;
  47.     }
  48.     while (j < nd) {
  49.         niz[k] = desni[j];
  50.         k++;
  51.         j++;
  52.     }
  53. }
  54.  
  55. void mergeSort(int * niz, int n) {
  56.     if (n < 2)
  57.         return;
  58.     int s = n / 2;
  59.     int *levi = new int[s];
  60.     int *desni = new int[n - s];
  61.     for (int i = 0; i < s; i++) {
  62.         levi[i] = niz[i];
  63.     }
  64.     for (int i = 0; i < n - s; i++) {
  65.         desni[i] = niz[s + i];
  66.     }
  67.     mergeSort(levi, s);
  68.     mergeSort(desni, n - s);
  69.     merge(niz, s, n - s, levi, desni);
  70.     delete[] levi;
  71.     delete[] desni;
  72. }
  73.  
  74. // Binary Search
  75. int binarySearch(int *niz, int n, int el) {
  76.     int d = 0;
  77.     int g = n - 1;
  78.     int s = (d + g) / 2;
  79.     while (niz[s] != el && s != d && s != g) {
  80.         if (niz[s] > el) {
  81.             g = s - 1;
  82.         }
  83.         else {
  84.             d = s + 1;
  85.         }
  86.         s = (d + g) / 2;
  87.     }
  88.     if (niz[s] == el) return s;
  89.     else return -1;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement