codskillz

Untitled

Nov 25th, 2021
669
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. #include<time.h>
  6.  
  7. int* generiraj(int n);
  8. void shuffle(int *niz, int n);
  9. int* presjek(int *skupA, int *skupB, int n);
  10. int* presjek_jedan_sortiran(int *skupA, int* skupB, int n);
  11. int* presjek_oba_sortirana(int *skupA, int *skupB, int n);
  12. int compare(const void * a, const void * b) {
  13.     return (*(int*)a - *(int*)b);
  14. }
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18.     double total;
  19.     clock_t start, end;
  20.  
  21.     for (int n = 100000; n < 30000000; n += 300000)
  22.     {
  23.         int *skupA = generiraj(n);
  24.         int *skupB = generiraj(n);
  25.         shuffle(skupA, n), shuffle(skupB, n);
  26.  
  27.         //PRESJEK
  28.  
  29.         start = clock();
  30.         int *p = presjek(skupA, skupB, n);
  31.         end = clock();
  32.  
  33.         printf("PRESJEK\n\n");
  34.  
  35.         printf("Start: %d\n", start);
  36.         printf("End: %d\n", end);
  37.         total = (((double)end - (double)start) / CLOCKS_PER_SEC);
  38.         printf("Total: %f\n\n", total);
  39.  
  40.         //PRESJEK_JEDAN_SORTIRAN
  41.  
  42.         start = clock();
  43.         int *pjs = presjek_jedan_sortiran(skupA, skupB, n);
  44.         end = clock();
  45.  
  46.         printf("PRESJEK_JEDAN_SORTIRAN\n\n");
  47.  
  48.         printf("Start: %d\n", start);
  49.         printf("End: %d\n", end);
  50.         total = (((double)end - (double)start) / CLOCKS_PER_SEC);
  51.         printf("Total: %f\n\n", total);
  52.  
  53.         //PRESJEK_OBA_SORTIRANA
  54.  
  55.         start = clock();
  56.         int *pos = presjek_oba_sortirana(skupA, skupB, n);
  57.         end = clock();
  58.  
  59.         printf("PRESJEK_OBA_SORTIRANA\n\n");
  60.  
  61.         printf("Start: %d\n", start);
  62.         printf("End: %d\n", end);
  63.         total = (((double)end - (double)start) / CLOCKS_PER_SEC);
  64.         printf("Total: %f\n\n", total);
  65.  
  66.         free(p);
  67.         free(pjs);
  68.         free(pos);
  69.     }
  70.  
  71.     return 0;
  72. }
  73.  
  74. int* generiraj(int n) {
  75.     int* niz = (int*)malloc(sizeof(int) * n);
  76.     niz[0] = rand() % 5;
  77.     int i;
  78.     for (i = 1; i < n; i++) {
  79.         niz[i] = niz[i - 1] + 1 + rand() % 5;
  80.     }
  81.     return niz;
  82. }
  83.  
  84. void shuffle(int *niz, int n) {
  85.     int i;
  86.     for (i = 0; i < n; i++) {
  87.         int j = (rand() * rand()) % n;
  88.         int tmp = niz[i];
  89.         niz[i] = niz[j];
  90.         niz[j] = tmp;
  91.     }
  92. }
  93.  
  94. int* presjek(int *skupA, int *skupB, int n)
  95. {
  96.     int counter, k;
  97.     counter = 0, k = 0;
  98.     int *p = (int *)malloc(n * sizeof(int));
  99.     if (p != NULL)
  100.     {
  101.         for (int i = 0; i < n; i++)
  102.         {
  103.             for (int j = 0; j < n; j++)
  104.             {
  105.                 if (skupA[i] = skupB[j])
  106.                 {
  107.                     counter++;
  108.                 }
  109.             }
  110.             if (counter);
  111.             {
  112.                 p[k] = skupA[i];
  113.                 k++;
  114.             }
  115.         }
  116.         p = (int *)realloc(p, k * sizeof(int));
  117.         return p;
  118.     }
  119.     return -1;
  120. }
  121.  
  122. int* presjek_jedan_sortiran(int *skupA, int* skupB, int n)
  123. {
  124.     int *pjs = (int *)malloc(n * sizeof(int));
  125.     int k = 0;
  126.     qsort(skupB, n, sizeof(int), compare);
  127.     if (pjs != NULL)
  128.     {
  129.         for (int i = 0; i < n; i++)
  130.         {
  131.             if (bsearch(&skupA[i], skupB, n, sizeof(int), compare) != NULL)
  132.             {
  133.                 pjs[k] = skupA[i];
  134.                 k++;
  135.             }
  136.         }
  137.         pjs = (int *)realloc(pjs, k * sizeof(int));
  138.         return pjs;
  139.     }
  140.  
  141.     return -2;
  142. }
  143.  
  144. int* presjek_oba_sortirana(int *skupA, int *skupB, int n)
  145. {
  146.     int *pos = (int *)malloc(n * sizeof(int));
  147.     int i, j, k;
  148.     i = 0, j = 0, k = 0;
  149.     qsort(skupA, n, sizeof(int), compare);
  150.     qsort(skupB, n, sizeof(int), compare);
  151.  
  152.     if (pos != NULL)
  153.     {
  154.         while (i < n && j < n)
  155.         {
  156.             if (skupA[i] < skupB[j])
  157.             {
  158.                 i++;
  159.             }
  160.             else if (skupA[i] > skupB[j])
  161.             {
  162.                 j++;
  163.             }
  164.             else if (skupA[i] == skupB[j])
  165.             {
  166.                 pos[k] = skupA[i];
  167.                 i++;
  168.                 j++;
  169.                 k++;
  170.             }
  171.         }
  172.         return pos;
  173.     }
  174.     return -3;
  175. }
RAW Paste Data