Advertisement
Nuparu00

zortox

Nov 1st, 2021
1,253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <limits.h>
  5. void populateArray(int arr[], int length, int min, int max);
  6.  
  7. #define COUNT 10
  8.  
  9.  
  10. int main()
  11. {
  12.     //srand(time(NULL));
  13.     srand(0);
  14.     while(1)
  15.     {
  16.  
  17.         int array[COUNT];
  18.         populateArray(array,COUNT,-100,100);
  19.         printArray(array,COUNT);
  20.         mergeSort(array,0,COUNT-1);
  21.         printArray(array,COUNT);
  22.  
  23.         char c;
  24.         scanf("%c",&c);
  25.     }
  26.  
  27.     return 0;
  28. }
  29.  
  30. void populateArray(int arr[], int length, int min, int max)
  31. {
  32.     for (int i = 0; i < length ; i++)
  33.     {
  34.         arr[i] = rand() % (max + 1 - min) + min;
  35.     }
  36. }
  37.  
  38. void printArray(int arr[], int length)
  39. {
  40.     printf("[");
  41.     for (int i = 0; i < length ; i++)
  42.     {
  43.         printf("%d",arr[i]);
  44.         if(i < length-1)
  45.         {
  46.             printf(", ");
  47.         }
  48.     }
  49.     printf("]\n");
  50. }
  51.  
  52. void mergeSort(int arr[], int start, int end)
  53. {
  54.     if(start < end)
  55.     {
  56.         int mid = start + (end-start)/2;
  57.         mergeSort(arr,start,mid);
  58.         mergeSort(arr,mid+1,end);
  59.         merge(arr,start,mid,end);
  60.     }
  61. }
  62.  
  63. void merge(int arr[], int start, int mid, int end)
  64. {
  65.     int lengthL = mid-start+1;
  66.     int lengthR = end-mid;
  67.  
  68.     int left[lengthL];
  69.     int right[lengthR];
  70.  
  71.     for(int i = 0; i < lengthL; i++)
  72.     {
  73.         left[i] = arr[start+i];
  74.     }
  75.  
  76.     for(int i = 0; i < lengthR; i++)
  77.     {
  78.         right[i] = arr[mid+i+1];
  79.     }
  80.  
  81.     printf("L: %d %d %d -", start, mid, end);
  82.     printArray(left,lengthL);
  83.     printf("R: %d %d %d -",start, mid, end);
  84.     printArray(right,lengthR);
  85.  
  86.     left[lengthL] = INT_MAX;
  87.     right[lengthR] = INT_MAX;
  88.  
  89.  
  90.     int i = 0;
  91.     int j = 0;
  92.  
  93.     for(int k = start; k <= end; k++)
  94.     {
  95.         if(left[i] <= right[j])
  96.         {
  97.             arr[k] = left[i];
  98.             i++;
  99.         }
  100.         else
  101.         {
  102.             arr[k] = right[j];
  103.             j++;
  104.         }
  105.     }
  106.     printf("A: %d %d %d -",start, mid, end);
  107.     printArray(arr,COUNT);
  108. }
  109.  
  110. void quickSort(int arr[], int start, int end)
  111. {
  112.     if(start < end)
  113.     {
  114.         int part = partition(arr,start,end);
  115.         quickSort(arr,start,part-1);
  116.         quickSort(arr,part+1,end);
  117.     }
  118. }
  119.  
  120. int partition(int arr[], int start, int end)
  121. {
  122.     int pivot = arr[end];
  123.     int i = start-1;
  124.     int j;
  125.     for(j = start; j < end; j++)
  126.     {
  127.         if(arr[j] <= pivot)
  128.         {
  129.             i++;
  130.             swap(arr,i,j);
  131.         }
  132.     }
  133.     swap(arr,i+1,end);
  134.     return i+1;
  135. }
  136.  
  137. void swap(int arr[], int a, int b)
  138. {
  139.     int temp = arr[a];
  140.     arr[a] = arr[b];
  141.     arr[b] = temp;
  142. }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement