Advertisement
Guest User

DS_Assignment1

a guest
Dec 21st, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.04 KB | None | 0 0
  1. /*
  2.  * main.c
  3.  *
  4.  *  Created on: Dec 15, 2014
  5.  *      Author: hershco
  6.  */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <time.h>
  10. #define N 10
  11.  
  12. void Merge(int* a ,int data[], int p ,int q , int r);
  13. void MergeSort(int* a ,int data[], int p , int r);
  14. int Partition(int* a,int data[], int p, int r);
  15. void quickSort( int a[], int data[], int p, int r);
  16. void insertionSort (int a [],int data[], int size);
  17. void quicksort_analysis(int a[], int data[], int length, int amount,FILE * database);
  18. void insertsort_analysis(int a[], int data[], int length, int amount,FILE * database);
  19. void mergesort_analysis(int a[], int data[], int length, int amount,FILE * database);
  20. void printdata(int a[], int data[], int n);
  21. void fillarray(int a[], int n);
  22.  
  23.  
  24.  
  25. int main()
  26. {
  27.     FILE * database;
  28.     int a[100000], i, n, size,data[5];
  29.     time_t t;
  30.     srand((unsigned) time(&t));
  31.  
  32.     database=fopen("data.csv","w");
  33.     n = 50; //Number of Array to build & Sort
  34.     size = 100; //size of each array
  35.  
  36.     for (i=1; i<31; i++)
  37.     {
  38.     printf("Running on size : %d \n",size*i);
  39.     fprintf(database,"\n%d",size*i);
  40.     quicksort_analysis(a,data, size*i, n,database);
  41.     mergesort_analysis(a,data, size*i, n,database);
  42.     insertsort_analysis(a,data, size*i, n,database);
  43.     }
  44.     fclose(database);
  45.  
  46. }//end main
  47.  
  48.  
  49. void Merge(int a[] ,int data[], int p ,int q , int r){
  50.     int i,j = 0,k = 0;
  51.     int n1 = q-p+1;
  52.     int n2 = r-q;
  53.     int *left = NULL,*right= NULL;
  54.     if (!(left = (int*)malloc(sizeof(int)* (n1 + 1))))
  55.             exit(1);
  56.     if(!(right = (int*)malloc(sizeof(int)* (n2 +1)))){
  57.         free(left);
  58.         exit(1);
  59.     }
  60.     for (i =0 ; i < n1 ; i ++){
  61.         left[i] = a[p + i];
  62.         data[1] ++;
  63.     }
  64.     for (i = 0; i < n2 ;  i++ ){
  65.         right[i] = a[q  + i + 1];
  66.         data[1] ++;
  67.     }
  68.     left[n1] =  2147483647;
  69.     right[n2] =  2147483647;
  70.     for (i = p ;i <= r; i++){
  71.         if (left[j] <= right[k]){
  72.             a[i] = left[j];
  73.             data[1]++;
  74.             j++;
  75.         }
  76.         else{
  77.             a[i] =right[k];
  78.             data[1]++;
  79.             k++;
  80.         }
  81.         data[2] ++;
  82.     }
  83.     free(left);
  84.     free(right);
  85. }
  86.  
  87. void MergeSort(int a[] ,int data[], int p , int r){
  88.     int q;
  89.     if(p<r){
  90.         q = (p+r)/2;
  91.         MergeSort(a,data,p,q);
  92.         MergeSort(a,data,q+1,r);
  93.         Merge(a,data,p,q,r);
  94.     }
  95. }
  96.  
  97. int Partition(int a[],int data[],int p,int r){
  98.     int x,i,j,temp;
  99.     x = a[r];
  100.     data[1] ++;
  101.     i = p-1;
  102.     for ( j= p ; j <r ; j++){
  103.         if (a[j] <= x){
  104.             i++;
  105.             temp = a[i];
  106.             a[i] = a[j];
  107.             a[j] = temp;
  108.             data[1] = data[1] + 3;
  109.         }
  110.         data[2]++;
  111.     }
  112.     temp = a[i+1];
  113.     a[i+1] =a[r];
  114.     a[r] = temp;
  115.     data[1] = data[1] + 3;
  116.     return i+1;
  117. }
  118.  
  119.  
  120. void quickSort( int a[], int data[], int p, int r){
  121.  int q;
  122.  int temp;
  123.  if (p <  r){
  124.      q = rand() % (r - p);
  125.      q= q + p;
  126.      temp =  a[q];
  127.      a[q] = a[r];
  128.      a[r] = temp;
  129.      data[1]  = data[1] +3;
  130.      q = Partition(a, data, p ,r);
  131.      quickSort(a,data,p,q-1);
  132.      quickSort(a,data,q+1,r);
  133.  }
  134. }
  135.  
  136. void insertionSort (int* a,int data[] , int size){
  137.     int j ,i, key;
  138.     for ( j =1;  j < size ; j++){
  139.         key =  a[j];
  140.         data[1]++;
  141.         i = j -1;
  142.         while (i >= 0){
  143.             data[2] ++;
  144.             if (a[i ]< key) {data[2]++;break;}
  145.             data[2]++;
  146.             a[i+1] = a[i];
  147.             data[1]++;
  148.             i = i -1;
  149.         }
  150.     a[i+1] = key ;
  151.     data[1] ++;
  152.     }
  153.  
  154. }
  155.  
  156. void fillarray(int a[], int n)
  157. {
  158.  int i;
  159.  for (i=0; i<n; i++)
  160.   a[i]=rand() % 100 + 1;
  161. }//end fillarray
  162.  
  163. void printdata(int a[], int data[], int n)
  164. {
  165.  int i;
  166.  for (i=0; i<4; i++)
  167.   printf("\n %d ", data[i]);
  168.  printf("\n");
  169.  for (i=0; i<n; i++)
  170.   printf(" %d ", a[i]);
  171.  printf("\n");
  172. }//end printarray
  173.  
  174.  
  175. void mergesort_analysis(int a[], int data[], int length, int amount,FILE * database)
  176. {
  177.     int i;
  178.     data[4] = 0;
  179.     data[3] = 0;
  180.  
  181.     for (i=0; i<amount; i++)
  182.     {
  183.     fillarray(a,length);
  184.     data[1] = 0;
  185.     data[2] = 0;
  186.     MergeSort(a,data,0,length-1);
  187.     data[4] = data[4]+(data[2]/amount);
  188.     data[3] = data[3]+(data[1]/amount);
  189.     }
  190.     //printf("\nMS Average Comparisons for %d arrays of %d items: %d\n",amount,length,data[4]);
  191.     //printf("MS Average Swaps for %d arrays of %d items: %d\n",amount,length,data[3]);
  192.     fprintf(database,",%d,%d", data[4],data[3]);
  193. }
  194.  
  195. void insertsort_analysis(int a[], int data[], int length, int amount,FILE * database)
  196. {
  197.     int i;
  198.     data[4] = 0;
  199.     data[3] = 0;
  200.  
  201.     for (i=0; i<amount; i++)
  202.     {
  203.     fillarray(a,length);
  204.     data[1] = 0;
  205.     data[2] = 0;
  206.     insertionSort(a,data,length-1);
  207.     data[4] = data[4]+(data[2]/amount);
  208.     data[3] = data[3]+(data[1]/amount);
  209.     }
  210.     //printf("\nMS Average Comparisons for %d arrays of %d items: %d\n",amount,length,data[4]);
  211.     //printf("MS Average Swaps for %d arrays of %d items: %d\n",amount,length,data[3]);
  212.     fprintf(database,",%d,%d", data[4],data[3]);
  213. }
  214.  
  215. void quicksort_analysis(int a[], int data[], int length, int amount,FILE * database)
  216. {
  217.     int i;
  218.     data[4] = 0;
  219.     data[3] = 0;
  220.  
  221.     for (i=0; i<amount; i++)
  222.     {
  223.     fillarray(a,length);
  224.     data[1] = 0;
  225.     data[2] = 0;
  226.     quickSort(a,data,0,length-1);
  227.     data[4] = data[4]+(data[2]/amount);
  228.     data[3] = data[3]+(data[1]/amount);
  229.     }
  230.     //printf("QS Average Comparisons for %d arrays of %d items: %d\n",amount,length,data[4]);
  231.     //printf("QS Average Swaps for %d arrays of %d items: %d\n",amount,length,data[3]);
  232.     fprintf(database,",%d,%d", data[4],data[3]);
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement