Guest User

Для Доброчана

a guest
Apr 29th, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5. // 9 10 1 7 0 1 9 3 2 0 - I
  6. // 9 7 0 5 7 10 4 3 4 5 - II
  7. // 7 4 0 9 9 6 1 1 0 9 - III
  8.  
  9.  
  10. void do_array(int *,int,int,int);
  11. void print(int *,int,int);
  12. void sort(int*,int,int);
  13. void swap(int*,int*);
  14. void sort2(int *,int);
  15. int prov(int *,int/*,int *,int **/);
  16.  
  17. int X=0,Y=0;
  18.  
  19. int main(void)
  20. {
  21. int N,*ar,a,b;
  22. //N - кол-во элементов ar-массив a и b - границы для рандома
  23. srand(time(NULL));
  24. printf("N,a,b=");
  25. scanf("%d%d%d",&N,&a,&b);
  26. ar=malloc(N*sizeof(int));
  27. do_array(ar,N,a,b);
  28. /*
  29. *ar=9;
  30. *(ar+1)=10;
  31. *(ar+2)=1;
  32. *(ar+3)=7;
  33. *(ar+4)=0;
  34. *(ar+5)=1;
  35. *(ar+6)=9;
  36. *(ar+7)=3;
  37. *(ar+8)=2;
  38. *(ar+9)=0;*/
  39. /*
  40. *ar=9;
  41. *(ar+1)=7;
  42. *(ar+2)=0;
  43. *(ar+3)=5;
  44. *(ar+4)=7;
  45. *(ar+5)=10;
  46. *(ar+6)=4;
  47. *(ar+7)=3;
  48. *(ar+8)=4;
  49. *(ar+9)=5;*/
  50. /*
  51. *ar=7;
  52. *(ar+1)=4;
  53. *(ar+2)=0;
  54. *(ar+3)=9;
  55. *(ar+4)=9;
  56. *(ar+5)=6;
  57. *(ar+6)=1;
  58. *(ar+7)=1;
  59. *(ar+8)=0;
  60. *(ar+9)=9;*/
  61. print(ar,0,N-1);
  62. sort2(ar,N);
  63. printf("END 2\nN is %d\n",N);
  64. print(ar,0,N-1);
  65. free(ar);
  66. return 0;
  67. }
  68.  
  69. void do_array(int *m,int N,int a,int b){
  70. int i;
  71. for(i=0;i<N;i++)
  72. *(m+i)=a+rand()%(b-a+1);
  73. }
  74.  
  75. void print(int *a,int f,int l){
  76. int i;
  77. printf("f=%d l=%d\n",f,l);
  78. for(i=f;i<=l;i++)
  79. printf("%3d",i);
  80. printf("\n");
  81. for(i=f;i<=l;i++)
  82. printf("%3d",*(a+i));
  83. printf("\n\n");
  84. }
  85.  
  86. void sort(int *a,int first,int last){
  87. if(last-first==1){
  88. if(*(a+first)<*(a+last)){
  89. printf("swapping:\n%2d & %2d\n%2d & %2d\n",first,last,*(a+first),*(a+last));
  90. swap(a+first,a+last);
  91. Y++;
  92. }
  93. X=X+2;
  94. return;
  95. }
  96. int l=first,r=last,S=*(a+(last+first)/2);
  97. printf("sorting array is:\n");
  98. print(a,l,r);
  99. printf("key is:\n%2d\n%2d\n",(last+first)/2,S);
  100. while(l<r){
  101. while(*(a+l)>S){
  102. l++;
  103. X++;
  104. }
  105. while(*(a+r)<S){
  106. r--;
  107. X++;
  108. }
  109. if(l<r){
  110. printf("swapping:\n%2d & %2d\n%2d & %2d\n",l,r,*(a+l),*(a+r));
  111. swap(a+l,a+r);
  112. Y++;
  113. l++;
  114. r--;
  115. }
  116. X++;
  117. print(a,first,last);
  118. }
  119. if(first<r){
  120. printf("Sorting left half\n");
  121. sort(a,first,r);
  122. }
  123. if(l<last){
  124. printf("Sorting right half\n");
  125. sort(a,l,last);
  126. }
  127. X=X+2;
  128. }
  129.  
  130. void swap(int *a,int *b){
  131. int c=*a;
  132. *a=*b;
  133. *b=c;
  134. return;
  135. }
  136.  
  137. void sort2(int *ar,int N){
  138. int k,i=0,i2=0,b,l=0;
  139. b=prov(ar,N/*,&i,&i2*/);
  140. while(b){
  141. printf(">>>\n");
  142. for(k=l;k<N-1-l;k++){
  143. if(*(ar+k)<*(ar+k+1)){
  144. swap(ar+k,ar+k+1);
  145. i2=i2+3;
  146. }
  147. print(ar,0,N-1);
  148. i=i+2;
  149. }
  150. l++;
  151. b=prov(ar+l-1,N-l/*,&i,&i2*/);
  152. if(b){
  153. printf("<<<\n");
  154. for(k=N-1-l;k>l-1;k--){
  155. if(*(ar+k)>*(ar+k-1)){
  156. swap(ar+k,ar+k-1);
  157. i2=i2+3;
  158. }
  159. print(ar,0,N-1);
  160. i=i+2;
  161. }
  162. }
  163. b=prov(ar+l,N-l/*,&i,&i2*/);
  164. }
  165. printf("Buble sort: comparings %d equals %d\nN=%d\n",i,i2,N);
  166. printf("FUCK\n");
  167. /* for(k=0;k<2;k++) //k<1
  168. printf("%d\n",k);*/
  169.  
  170. return;
  171. }
  172.  
  173. int prov(int *a,int N/*,int *k1,int *k2*/){
  174. int i=0,b=0;
  175. while(i+1){
  176. if(*(a+i)<*(a+i+1))
  177. {
  178. b=1;
  179. i=-1;
  180. // *k2=*k2+2;
  181. }
  182. else{
  183. i++;
  184. // *k2++;
  185. }
  186. if(i>N-2){
  187. i=-1;
  188. // *k2++;
  189. }
  190. // *k1=*k1+3;
  191. }
  192. return b;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment