Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define max 30000
  5. int ar[max+1];
  6. int sub[max+1];
  7. int fg;
  8. void ins(int low,int high)
  9. {
  10. int i,j;
  11. for(j=low+1;j<=high;j++)
  12. {
  13. int t=ar[j];
  14. i=j-1;
  15. while(i>=low && ar[i]>t)
  16. {
  17. ar[i+1]=ar[i];
  18. i--;
  19. }
  20. ar[i+1]=t;
  21. }
  22.  
  23. }
  24. void merge(int low,int mid,int high)
  25. {
  26. int i=low;
  27.  
  28. int j=mid+1;
  29. int k=0,l;
  30. while(i<=mid && j<=high)
  31. {
  32. if(ar[i]<ar[j])
  33. sub[k++]=ar[i++];
  34. else
  35. sub[k++]=ar[j++];
  36.  
  37. }
  38. if(i>mid)
  39. {
  40. for(l=j;l<=high;l++)
  41. sub[k++]=ar[l];
  42. }
  43. else
  44. for(l=i;l<=mid;l++)
  45. sub[k++]=ar[l];
  46. k=0;
  47. for(l=low;l<=high;l++)
  48. ar[l]=sub[k++];
  49. }
  50.  
  51. void mergesort(int low,int high)
  52. {
  53. if(fg)
  54. {
  55. if(low+15<high)
  56. {
  57. ins(low,high);
  58.  
  59. }
  60. else if(low<high)
  61. {
  62. int mid=(low+high)/2;
  63. mergesort(low,mid);
  64. mergesort(mid+1,high);
  65. merge(low,mid,high);
  66. }
  67. else return;
  68.  
  69. }
  70. else if(low<high)
  71. {
  72. int mid=(low+high)/2;
  73. mergesort(low,mid);
  74. mergesort(mid+1,high);
  75. merge(low,mid,high);
  76. }
  77. else return;
  78. }
  79. int main()
  80. {
  81. int i;
  82. FILE *fp;
  83. fp=fopen("input.txt","w");
  84. for(i=1;i<=max;i++)
  85. {
  86. fprintf(fp,"%d ",rand()%10000);
  87. if(i%10==0)
  88. fprintf(fp,"%c",10);
  89. }
  90. fclose(fp);
  91. fp=fopen("input.txt","r");
  92. i=0;
  93. while(fscanf(fp,"%d",&ar[i++])!=-1);
  94. fclose(fp);
  95. clock_t cal,en;
  96. cal=clock();
  97.  
  98. mergesort(0,max-1);
  99.  
  100. en=clock();
  101.  
  102. double div=CLOCKS_PER_SEC;
  103.  
  104. double t=(en-cal)/div;
  105.  
  106.  
  107. printf("%lf\n",t);
  108. fp=fopen("output.txt","w");
  109.  
  110. for(i=0;i<max;i++)
  111. {
  112. fprintf(fp,"%d ",ar[i]);
  113. if((i+1)%10==0)
  114. fprintf(fp,"\n");
  115. }
  116.  
  117. fprintf(fp,"total time %lf sec\n\n",t);
  118. fclose(fp);
  119.  
  120. fp=fopen("input.txt","r");
  121. i=0;
  122. while(fscanf(fp,"%d",&ar[i++])!=-1);
  123. fclose(fp);
  124. fp=fopen("output.txt","a");
  125. cal=clock();
  126. fg=1;
  127. mergesort(0,max-1);
  128.  
  129. en=clock();
  130.  
  131. div=CLOCKS_PER_SEC;
  132.  
  133. t=(en-cal)/div;
  134. for(i=0;i<max;i++)
  135. {
  136. fprintf(fp,"%d ",ar[i]);
  137. if((i+1)%10==0)
  138. fprintf(fp,"\n");
  139. }
  140.  
  141. fprintf(fp,"total time %lf sec\n\n",t);
  142. printf("%lf\n",t);
  143. fclose(fp);
  144.  
  145.  
  146.  
  147. return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement