Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. int arr[50004],b[50004];
  5. double t=CLOCKS_PER_SEC;
  6. void sort(int low,int mid,int high);
  7. void partition(int low,int high);
  8. void insertion(int low,int high);
  9.  
  10. int main()
  11. {
  12. FILE *in,*out;
  13. int i,j,k,l,num,n;
  14. in=fopen("input.txt","w");
  15. scanf("%d",&n);
  16. for(i=0;i<n;i++)
  17. {
  18. num=rand()%1000;
  19. if(num<=0)
  20. num=num+1000;
  21. fprintf(in," ");
  22. fprintf(in,"%d",num);
  23.  
  24. }
  25. fclose(in);
  26. in=fopen("input.txt","r");
  27. i=0;
  28. while(fscanf(in,"%d",&num)==1)
  29. {
  30. arr[i++]=num;
  31.  
  32. }
  33.  
  34. clock_t t1=clock();
  35. partition(0,n-1);
  36. clock_t t2=clock();
  37. printf("%lf\n",(t2-t1)/t);
  38.  
  39.  
  40. fclose(in);
  41. out=fopen("output.txt","w");
  42. for(i=0;i<n;i++)
  43. {
  44. fprintf(out," %d",arr[i]);
  45. }
  46. fclose(out);
  47.  
  48.  
  49. printf("\n");
  50. return 0;
  51.  
  52. }
  53.  
  54. void sort(int low,int mid,int high)
  55. {
  56. int i,j,k,l,b[50004];
  57. l=low;
  58. i=low;
  59. j=mid+1;
  60. while((l<=mid)&&(j<=high))
  61. {
  62. if(arr[l]<=arr[j])
  63. {
  64. b[i]=arr[l];
  65. l++;
  66. }
  67. else
  68. {
  69. b[i]=arr[j];
  70. j++;
  71. }
  72. i++;
  73. }
  74. if(l>mid)
  75. {
  76. for(k=j;k<=high;k++)
  77. {
  78. b[i]=arr[k];
  79. i++;
  80. }
  81. }
  82. else
  83. {
  84. for(k=l;k<=mid;k++)
  85. {
  86. b[i]=arr[k];
  87. i++;
  88. }
  89. }
  90. for(k=low;k<=high;k++)
  91. {
  92. arr[k]=b[k];
  93. }
  94. }
  95.  
  96. void partition(int low,int high)
  97. {
  98. int mid;
  99. if(high-low<15)
  100. insertion(low,high);
  101. else if(low<high)
  102. {
  103. mid=(low+high)/2;
  104. partition(low,mid);
  105. partition(mid+1,high);
  106. sort(low,mid,high);
  107. }
  108. }
  109.  
  110. void insertion(int low,int high)
  111. {
  112. int j,k,i;
  113. for(j=low+1;j<=high;j++)
  114. {
  115. k=arr[j];
  116. i=j-1;
  117. while(i>=low && arr[i]>k)
  118. {
  119. arr[i+1]=arr[i];
  120. i--;
  121. }
  122. arr[i+1]=k;
  123. }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement