Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <limits.h>
  5. clock_t generate_data_timer, sorting_timer;
  6.  
  7.  
  8. void merge(int* a, int n, int m) {
  9.     int i, j, k;
  10.     int* x = malloc(n * sizeof(int));
  11.     for (i = 0, j = m, k = 0; k < n; k++) {
  12.         x[k] = j == n ? a[i++]
  13.             : i == m ? a[j++]
  14.             : a[j] < a[i] ? a[j++]
  15.             : a[i++];
  16.     }
  17.     for (i = 0; i < n; i++) {
  18.         a[i] = x[i];
  19.     }
  20.     free(x);
  21. }
  22.  
  23. void merge_sort(int *array, int array_length) {
  24.     if (array_length < 2)
  25.         return;
  26.     int middle_index = array_length / 2;
  27.     merge_sort(array, middle_index);
  28.     merge_sort(array + middle_index, array_length - middle_index);
  29.     merge(array, array_length, middle_index);
  30. }
  31.  
  32. void print_array(int array[], int n) {
  33.     for (int i = 0; i < n; ++i) {
  34.         printf("%d ", array[i]);
  35.     }
  36.     printf("\n");
  37. }
  38.  
  39. void generate_data(int A[], int N) {
  40.     generate_data_timer = clock();
  41.     int i;
  42.     srand(10);
  43.     for (i = 0; i < N; i++) {
  44.         int a = A[i] = 10 + rand() % 1000;
  45.     }
  46. }
  47.  
  48. int main()
  49. {
  50.     int* a;
  51.     int n;
  52.  
  53.     printf("Enter array length\n");
  54.     scanf("%d", &n);
  55.  
  56.     a = (int*)malloc(n * sizeof(int));
  57.     generate_data(a, n);
  58.  
  59.     printf("Before Merge Sort: ");
  60.     print_array(a, n);
  61.  
  62.     sorting_timer = clock();
  63.  
  64.     merge_sort(a, n);
  65.     double sortingTime_taken = ((double)sorting_timer) / CLOCKS_PER_SEC;
  66.     double generatingTime_taken = ((double)generate_data_timer) / CLOCKS_PER_SEC;
  67.  
  68.     printf("\nAfter Merge Sort: ");
  69.     print_array(a, n);
  70.     printf("Generated data in: %f seconds\n", generatingTime_taken);
  71.     printf("Sort calculation time: %f seconds\n", sortingTime_taken);
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement