Advertisement
Merkava

Untitled

May 10th, 2014
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4.  
  5. #define N1 1000
  6. #define N2 5000
  7. #define N3 10000
  8. #define N4 15000
  9.  
  10. void in_pmas (int *, int *, int); //Êîïèè ìàññèâà
  11. void in_mas (int *, int); //Íåóïîðÿäî÷åííàÿ ïîñëåäàâàòåëüíîñòü
  12. void in_up_mas (int *, int); //Óïîðÿäî÷åííûé ìàññèâ
  13. void in_uo_mas (int *, int); //Óïîðÿäî÷åííûé â îáðàòíîì ïîðÿäêå
  14. void sort (int *, int *, int *, int *, int, int, int, int); //Ñîðòèðîâêà
  15. int QuickSort (int *, int);
  16. int HeapSort (int *, int n);
  17. int sift (int *, int, int);
  18. int BubbleSort1 (int *, int);
  19. int StraightInsertionSort( int *, int n );
  20. void tab (int *, int); //äëÿ òàáëèöû
  21. int comp (const void *i, const void *j);
  22.  
  23. int colG=0;
  24.  
  25. int main()
  26. {
  27. setlocale( LC_ALL, "rus");
  28. int i, j;
  29. int *n1=(int*)malloc(N1 * sizeof(int)), *n2=(int*)malloc(N2 * sizeof(int)), *n3=(int*)malloc(N3 * sizeof(int)), *n4=(int*)malloc(N4 * sizeof(int));
  30. in_up_mas(n1, N1);
  31. in_up_mas(n2, N2);
  32. in_up_mas(n3, N3);
  33. in_up_mas(n4, N4);
  34. puts(" _____________________________________________________________________");
  35. puts("| Ìàññèâû â ïðÿìîì ïîðÿäêå |");
  36. sort(n1, n2, n3, n4, N1, N2, N3, N4);
  37. in_uo_mas(n1, N1);
  38. in_uo_mas(n2, N2);
  39. in_uo_mas(n3, N3);
  40. in_uo_mas(n4, N4);
  41. puts(" _____________________________________________________________________");
  42. puts("| Ìàññèâû â îáðàòíîì ïîðÿäêå |");
  43. sort(n1, n2, n3, n4, N1, N2, N3, N4);
  44. in_mas(n1, N1);
  45. in_mas(n2, N2);
  46. in_mas(n3, N3);
  47. in_mas(n4, N4);
  48. puts(" _____________________________________________________________________");
  49. puts("| Ìàññèâ çàïîëíåííûé ñëó÷àéíûìè ÷èñëàìè |");
  50. sort(n1, n2, n3, n4, N1, N2, N3, N4);
  51. system("pause");
  52. free(n1);
  53. free(n2);
  54. free(n3);
  55. free(n4);
  56. return 0;
  57. }
  58.  
  59. void sort (int *n1, int *n2, int *n3, int *n4, int col1, int col2, int col3, int col4)
  60. {
  61. int (*f[4])(int *, int) = {StraightInsertionSort, HeapSort, BubbleSort1, QuickSort};
  62. int *p_n1=(int*)malloc(col1 * sizeof(int)), *p_n2=(int*)malloc(col2 * sizeof(int)), *p_n3=(int*)malloc(col3 * sizeof(int)), *p_n4=(int*)malloc(col4 * sizeof(int));
  63. int *mas=(int*)malloc(16 * sizeof(int));
  64. int i, j, k=0;
  65. for (j=0; j<4; j++)
  66. {
  67. in_pmas (p_n1, n1, col1);
  68. in_pmas (p_n2, n2, col2);
  69. in_pmas (p_n3, n3, col3);
  70. in_pmas (p_n4, n4, col4);
  71. mas[k]=f[j](p_n1, col1); k++;
  72. mas[k]=f[j](p_n2, col2); k++;
  73. mas[k]=f[j](p_n3, col3); k++;
  74. mas[k]=f[j](p_n4, col4); k++;
  75. }
  76. tab (mas, k);
  77. free(mas);
  78. free(p_n1);
  79. free(p_n2);
  80. free(p_n3);
  81. free(p_n4);
  82. }
  83.  
  84. void in_pmas (int *p_m, int *m, int n)
  85. {
  86. int i;
  87. for (i=0; i<n; i++)
  88. p_m[i]=m[i];
  89. }
  90.  
  91. void in_mas (int *m, int n)
  92. {
  93. int i;
  94. for (i=0; i<n; i++)
  95. m[i]=rand()%100;
  96. }
  97.  
  98. void in_up_mas (int *m, int n)
  99. {
  100. int i;
  101. for (i=0; i<n; i++)
  102. m[i]=i+1;
  103. }
  104.  
  105. void in_uo_mas (int *m, int n)
  106. {
  107. int i;
  108. for (i=0; i<n; i++)
  109. m[i]=n-i;
  110. }
  111.  
  112. void tab (int *m, int n)
  113. {
  114. puts("|_____________________________________________________________________|");
  115. puts("| | | | | |");
  116. puts("| | 1000 | 5000 | 10000 | 15000 |");
  117. puts("|___________________________|________|________|___________|___________|");
  118. puts("| | | | | |");
  119. printf("| Ïðîñòûìè âñòàâêàìè |%8d|%8d|%11d|%11d|\n", m[0], m[1], m[2], m[3]);
  120. printf("| Ïèðàìèäàëüíàÿ ñîðò |%8d|%8d|%11d|%11d|\n", m[4], m[5], m[6], m[7]);
  121. printf("| Ïóçûðüêîâàÿ ñîðò ñ îãðàíè÷|%8d|%8d|%11d|%11d|\n", m[8], m[9], m[10], m[11]);
  122. printf("| Áûñòðàÿ ñîðòèðîâêà |%8d|%8d|%11d|%11d|\n", m[12], m[13], m[14], m[15]);
  123. puts("|___________________________|________|________|___________|___________|");
  124. system("pause");
  125. }
  126.  
  127. /* Áûñòðàÿ ñîðòèðîâêà */
  128. int QuickSort (int *a, int n)
  129. {
  130. int x, w, i, j, col4=0;
  131. x = a[n/2];
  132. i=0; j=n-1;
  133. do
  134. {
  135. while (a[i]<x) i++;
  136. while (x<a[j]) j--;
  137. if (i<=j)
  138. {
  139. w = a[i]; a[i] = a[j]; a[j] = w;
  140. i++; j--;
  141. col4+=3;
  142. }
  143. }
  144. while (i<j);
  145. //printf("\nÁûñòðàÿ ñîðòèðîâêà, êîë-âî ïåðåñòàíîâîê: %d\n", counter3);
  146. if (j>0)
  147. col4+=QuickSort (a, j+1);
  148. if (i<n-1)
  149. col4+=QuickSort (a+i, n-i);
  150. return col4;
  151. }
  152.  
  153. /* Ïèðàìèäàëüíàÿ ñîðòèðîâêà */
  154. int HeapSort (int *a, int n)
  155. {
  156. int col2=0, left = n/2+1, right=n-1, x;
  157. while (left>1)
  158. col2+=sift (a, --left, right);
  159. while (right>1)
  160. {
  161. x = a[1];
  162. a[1] = a[right];
  163. a[right] = x;
  164. col2+=sift (a, left, --right);
  165. col2+=3;
  166. }
  167. return col2;
  168. }
  169.  
  170. /* Ïðîñåèâàíèå ñêâîçü ïèðàìèäó */
  171. int sift (int *a, int left, int right)
  172. {
  173. int i, j, x=a[left],col2=1;
  174. i = left; j = 2*left;
  175. if (j<right && a[j+1]<a[j]) //åñëè ýëåìåíò j íå ïîñëåäíèé â ðàññìàòð. ïîñëåäîâàòåëüíîñòè
  176. j++; //è ëåâûé áðàò ìåíüøå ïðàâîãî, ïåðåñòàâëÿåì óêàçàòåëü íà íåãî
  177. while (j<=right && a[j]<x) //ïðîñìàòðèâàåì ïîòîìêîâ äî êîíöà ïîñëåäîâàòåëüíîñòè,
  178. { //åñëè îíè ìåíüøå òåêóùåãî (õ) ýëåìåíòà, ò.å. íàðóøåíà
  179. a[i] = a[j]; //óïîðÿäî÷åííîñòü ïèðàìèäû, òî âîññòàíàâëèâàåì åå,
  180. i = j; //ïîäíèìàÿ ïîòîìêîâ íà óðîâåíü âûøå
  181. j *= 2;
  182. col2++;
  183. if (j<right && a[j+1]<a[j]) //è êàæäûé ðàç âûáèðàåì äëÿ àíàëèçà ìåíüøåãî èç
  184. j++; //áðàòüåâ
  185. }
  186. a[i] = x;col2++;
  187. return col2;
  188. }
  189.  
  190. /* Ïóçûðüêîâàÿ ñîðòèðîâêà ñ îãðàíè÷åíèåì ïðîõîäîâ */
  191. int BubbleSort1 (int *a, int n)
  192. {
  193. int i, j, x, flag=1, col3=0;
  194. for (i=1; flag; i++)
  195. {
  196. flag = 0; //ïðèçíàê óïîðÿäî÷åííîé ïîñëåäîâàòåëüíîñòè
  197. for (j=n-1; j>=i; j--)
  198. if (a[j]>a[j-1])
  199. {
  200. col3+=3;
  201. x = a[j-1];
  202. a[j-1] = a[j];
  203. a[j] = x;
  204. flag = 1; //áûëà ïåðåñòàíîâêà, çíà÷èò, åùå íå âñå
  205. }
  206. }
  207. return col3;
  208. }
  209.  
  210. /* Ñîðòèðîâêà âñòàâêàìè
  211. int StraightSelection (int* arr,int n)
  212. {
  213. int counter=0, i, j, tmp;
  214. for(i=1;i<n;i++){
  215. for(j=i; j>0 && arr[j-1]<arr[j];j--){
  216. counter+=3;
  217. tmp=arr[j-1];
  218. arr[j-1]=arr[j];
  219. arr[j]=tmp;
  220. }
  221. }
  222. return counter;
  223. }
  224. */
  225.  
  226. /* Ñîðòèðîâêà ïðîñòûìè âñòàâêàìè
  227. int InsertSort(int *mas, int n) //ñîðòèðîâêà âñòàâêàìè
  228. {
  229. int i, j , key=0, temp=0, counter;
  230. for (i=0; i<n-1; i++)
  231. {
  232. key=i+1;
  233. temp=mas[key];
  234. counter++;
  235. for (j=i+1; j>0 && temp<mas[j-1]; j--)
  236. {
  237.  
  238. mas[j]=mas[j-1];
  239. key=j-1;
  240. counter++;
  241.  
  242. }
  243. mas[key]=temp;
  244. counter++;
  245. }
  246. return counter;
  247. }*/
  248.  
  249. ////////
  250.  
  251. int StraightInsertionSort( int *m, int n )
  252. {
  253. int x, j, i,col1;
  254. for( i = 1; i < n; i++ )
  255. {
  256. x = m[ i ]; // âñòàâëÿåì ýëåìåíò
  257. j = i - 1;
  258. // Ïîèñê ìåñòà âñòàâêè
  259. col1+=2;
  260. while( j != -1 && (x < m[ j ]) )
  261. {
  262. m[j+1] = m[j]; //ïåðåìåùåíèå ïðîïóñêàåìîãî ýëåìåíòà âïðàâî
  263. j--;
  264. }
  265.  
  266. m[ j + 1 ] = x; // Ýëåìåíò çàïîëíÿåò îñâîáîäèâøååñÿ ìåñòî
  267. col1++;
  268. }
  269. return col1;
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement