Advertisement
Vprento

Напредно сортирање

Dec 4th, 2017
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <malloc.h>
  5.  
  6. void merge(int *A,int *L,int dl,int *R,int dr)
  7. {
  8.   int i=0,j=0,k=0;
  9.   while(i<dl&&j<dr)
  10.   {
  11.     if(L[i]<R[j]) A[k++]=L[i++];
  12.     else A[k++]=R[j++];
  13.   }
  14.   while(i<dl)
  15.     A[k++]=L[i++];
  16.   while(j<dr)
  17.     A[k++]=R[j++];
  18.  
  19. }
  20.  
  21. void sort(int *a, int n) {
  22.     if(n<2) return;
  23.     int mid;
  24.     mid=n/2;
  25.     int *L=malloc(sizeof(int)*mid);
  26.     int *R=malloc(sizeof(int)*(n-mid));
  27.     int i;
  28.     for(i=0;i<mid;i++) *(L+i)=a[i];
  29.     for(i=mid;i<n;i++) R[i-mid]=a[i];
  30.     sort(L,mid);
  31.     sort(R,n-mid);
  32.     merge(a,L,mid,R,n-mid);
  33.     free(L);
  34.     free(R);
  35. }
  36.  
  37. int main() {
  38.     int n, i;
  39.     scanf("%d", &n);
  40.     int *a = malloc(sizeof(int) * n);
  41.     srand(time(NULL));
  42.     for(i = 0; i < n; ++i) {
  43.         a[i] = rand() % 10000;
  44.     }    
  45.     sort(a, n);
  46.     int sorted = 1;
  47.     for(i = 0; i < n - 1; ++i) {
  48.         if(a[i] > a[i + 1]) {
  49.             sorted = 0;
  50.             break;
  51.         }
  52.     }
  53.     if(!sorted) {
  54.         printf("NOT SORTED");
  55.     } else {
  56.         printf("SORTED");
  57.     }
  58.     free(a);
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement