Advertisement
Misipuk

Bubble_Merge

Nov 20th, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define RAND(R) rand()%R
  4. #define N 10
  5. #define CNT_PRN printf("Count compare: %ld\nCount copy: %ld\n\n", cnt_cmp, cnt_cpy);
  6.  
  7. long cnt_cmp, cnt_cpy;//просто ни нада так делать
  8.  
  9. int best_array(int a[], int n);
  10. int worst_array(int a[], int n);
  11. int avg_array(int a[], int n, int k, int s_ind);
  12. int printf_array(int a[], int n);
  13. int bubble_sort(int a[], int n);
  14. int merge(int array[],int left,int m, int right);
  15. int merge_sort(int a[], int left, int right);
  16.  
  17. int main(int argc, char *argv[]) {
  18.     int array[N];
  19.     printf("BUBBLE:\n");
  20.     best_array(array, N);
  21.     bubble_sort(array, N);
  22.     CNT_PRN
  23.     cnt_cmp = cnt_cpy  = 0;
  24.     avg_array(array, N, 10, 0);
  25.     CNT_PRN
  26.     cnt_cmp = cnt_cpy  = 0;
  27.     worst_array(array, N);
  28.     bubble_sort(array, N);
  29.     CNT_PRN
  30.     cnt_cmp = cnt_cpy  = 0;
  31.     printf("MERGE:\n");
  32.     best_array(array, N);
  33.     merge_sort(array,0, N-1);
  34.     CNT_PRN
  35.     cnt_cmp = cnt_cpy  = 0;
  36.     avg_array(array, N, 10, 1);
  37.     CNT_PRN
  38.     cnt_cmp = cnt_cpy  = 0;
  39.     worst_array(array, N);
  40.     merge_sort(array, 0, N-1);
  41.     CNT_PRN
  42.  
  43.     return 0;
  44. }
  45.  
  46. int best_array(int a[], int n){
  47.     int i=0;
  48.     for(i=0;i<n;i++) a[i]=i;
  49.     return i;
  50. }
  51.  
  52. int worst_array(int a[], int n){
  53.     int i=0;
  54.     for(i=0;i<n;i++) a[i]=n-1-i;
  55.     return i;
  56. }
  57.  
  58. int avg_array(int a[], int n, int k, int s_ind){
  59.     int i=0, j=0;
  60.     for(j=0;j<k;j++){
  61.         srand(j);
  62.         for(i=0;i<n;i++) a[i]=RAND(100);
  63.         if(s_ind==0){
  64.             bubble_sort(a,n);
  65.         }else if(s_ind==1){
  66.             merge_sort(a, 0, n-1);
  67.         }
  68.  
  69.     }
  70.     cnt_cmp/=k;
  71.     cnt_cpy/=k;
  72.     return j;
  73. }
  74.  
  75. int printf_array(int a[], int n){
  76.     int i=0;
  77.     for(i=0;i<n;i++) printf("%d\t", a[i]);
  78.     printf("\n\n");
  79.     return i;
  80. }
  81.  
  82. int bubble_sort(int a[], int n){
  83.     int temp=0, r=n-1, i=0, k=0;
  84.     while(r>0){
  85.         k=0;
  86.         for (i=0; i<r; i++){
  87.             cnt_cmp++;
  88.             if(a[i]>a[i+1]){
  89.                 temp = a[i];
  90.                 a[i]=a[i+1];
  91.                 a[i+1]=temp;
  92.                 cnt_cpy +=3;
  93.                 k=i;
  94.             }
  95.         }
  96.         r=k;
  97.     }
  98. }
  99.  
  100. int merge(int array[],int left,int m, int right){//compares two sorted arrays
  101.     int i=0, j=0, k=0, n_left=0, n_right=0;
  102.     n_left = m-left+1;
  103.     n_right = right - m;
  104.     int L[n_left+1];
  105.     int R[n_right+1];
  106.     for(i=0; i<n_left; i++){
  107.         L[i]=array[left+i];
  108.         cnt_cpy++;
  109.     }
  110.     for(j=0; j<n_right; j++){
  111.         R[j]=array[m+1+j];
  112.         cnt_cpy++;
  113.     }
  114.     L[n_left] = 99999;
  115.     R[n_right] = 99999;
  116.     i=j=0;
  117.     k=left;
  118.     while(k<=right){
  119.         cnt_cmp++;
  120.         if(L[i]<=R[j])
  121.         {
  122.             array[k++]=L[i++];
  123.             cnt_cpy++;
  124.         }
  125.         else{
  126.             array[k++]=R[j++];
  127.             cnt_cpy++;
  128.         }
  129.         cnt_cmp++;
  130.     }
  131. }
  132.  
  133. int merge_sort(int a[], int left, int right){
  134.     int m=0;
  135.     if(left<right){
  136.         cnt_cmp++;
  137.         m = (left+right)/2;
  138.         merge_sort(a, left, m);
  139.         merge_sort(a, m+1, right);
  140.         merge(a, left, m, right);
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement