Advertisement
brsjak

Napredno sortiranje - SP Lab 8

Nov 1st, 2016
1,716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.42 KB | None | 0 0
  1. /*Напредно сортирање Problem 4 (1 / 2)
  2. Да се напише функција за ефикасно сортирање на низа. Низата може да има 100000 елементи.*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8.  
  9. int partition( int *a, int l, int r) {
  10.     int pivot, i, j, t;
  11.     pivot = a[l];
  12.     i = l;
  13.     j = r+1;
  14.  
  15.     while( 1) {
  16.         do ++i;
  17.         while( a[i] <= pivot&&i <= r );
  18.         do --j;
  19.         while( a[j] > pivot );
  20.         if( i >= j ) break;
  21.         t = a[i];
  22.         a[i] = a[j];
  23.         a[j] = t;
  24.     }
  25.     t = a[l];
  26.     a[l] = a[j];
  27.     a[j] = t;
  28.     return j;
  29. }
  30. void my_sort(int *a, int l,int r) {
  31.     int j;
  32.  
  33.     if( l < r ) {
  34.         // divide and conquer
  35.         j = partition( a, l, r);
  36.         my_sort( a, l, j-1);
  37.         my_sort( a, j+1, r);
  38.     }
  39. }
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46. // не ја менувајте главната функција
  47. int main() {
  48.     int n, i;
  49.     scanf("%d", &n);
  50.     int *a = malloc(sizeof(int) * n);
  51.     srand(time(NULL));
  52.     for(i = 0; i < n; ++i) {
  53.         a[i] = rand() % 10000;
  54.     }
  55.  
  56.  
  57.     my_sort(a, 0, n);
  58.  
  59.  
  60.     int sorted = 1;
  61.     for(i = 0; i < n - 1; ++i) {
  62.         if(a[i] > a[i + 1]) {
  63.             sorted = 0;
  64.             break;
  65.         }
  66.     }
  67.     if(!sorted) {
  68.         printf("NOT SORTED");
  69.     } else {
  70.         printf("SORTED");
  71.     }
  72.     free(a);
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement