Advertisement
JStefan

[Laboratoriski] Sortiranje

Dec 6th, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void quick_sort(int*, int, int);
  5. void merge(int *, int , int *, int , int *, int );
  6. void swap(int *, int *);
  7.  
  8. int main()
  9. {
  10.     int golA, golB, golC, i;
  11.     scanf("%d %d", &golA, &golB);
  12.     int a[golA], b[golB];
  13.  
  14.     for(i = 0; i < golA; ++i) {
  15.         scanf("%d", &a[i]);
  16.     }
  17.     for(i = 0; i < golB; ++i) {
  18.         scanf("%d", &b[i]);
  19.     }
  20.  
  21.     golC = golA+golB;
  22.     int c[golC];
  23.     quick_sort(a, 0, golA-1);
  24.     quick_sort(b, 0, golB-1);
  25.     merge(a, golA, b, golB, c, 0);
  26.     quick_sort(c, 0, golC-1);
  27.     printf("\n");
  28.     for(i = 0; i < golC; ++i) {
  29.         printf("%d ", c[i]);
  30.     }
  31.     return 0;
  32. }
  33.  
  34. void merge(int *a,  int golA, int *b, int golB, int *c, int i) {
  35.     if(i < golA+golB) {
  36.         if(i < golA) c[i] = a[i];
  37.         else c[i] = b[i-golA];
  38.         merge(a, golA, b, golB, c, i+1);
  39.     } else return;
  40. }
  41.  
  42. void quick_sort(int *niza, int start, int end) {
  43.     if(start < end) {
  44.         int i = start-1;
  45.         int j = start;
  46.         int pivot = end;
  47.  
  48.         for(;j <= end; j++) {
  49.             if(niza[j] <= niza[pivot]) {
  50.                 i++;
  51.                 swap(&niza[i], &niza[j]);
  52.             }
  53.         }
  54.         quick_sort(niza, start, i-1);
  55.         quick_sort(niza, i+1, end);
  56.     }
  57. }
  58.  
  59. void swap(int *a, int *b) {
  60.     int temp = *a;
  61.     *a = *b;
  62.     *b = temp;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement