Guest User

Untitled

a guest
Feb 18th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.05 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "math.h"
  3. #include <iostream>
  4. #include <time.h>
  5. #include <windows.h>
  6. #include <stdio.h>
  7. #include <conio.h>
  8. long sravnii[5];
  9. long perestanovok[5];
  10. using namespace std;
  11.  
  12. HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  13. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  14. void bubble_sort(int N,int M, int **arr) //Функция пузырьковой сортировки
  15. {
  16. HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  17. SetConsoleTextAttribute(hStdout, 10);
  18. printf("\nPuzirek sort\n");
  19. SetConsoleTextAttribute(hStdout, 15);
  20. int sravnenii = 0, obmenov = 0;
  21. int mas[100];
  22. int count = 0;
  23. for (int i=0; i<M; i++)
  24. {
  25. count=0;
  26. for (int j=0;j<N;j++)
  27. {
  28. if (arr[j][i]%2==0) //Проверка элемента массива на четность
  29. {
  30. mas[count]=arr[j][i];//Создание нового массива из четных элементов
  31. count++;
  32. }
  33. }
  34.  
  35. for (int j=0; j<count; j++)//Пузырьковая сортировка нового массива
  36. for (int k=1; k<count; k++)
  37. {
  38. if (mas[k-1] < mas[k])
  39. {
  40. swap (mas[k-1], mas[k]);
  41. ++obmenov;
  42. }
  43. ++sravnenii;
  44. }
  45.  
  46. count=0;
  47.  
  48. for (int j=0;j<N;j++)
  49. {
  50. if (arr[j][i]%2==0)
  51. {
  52. arr[j][i]=mas[count];
  53. count++;
  54. }
  55. }
  56. }
  57.  
  58. for (int i=0; i<N; ++i)
  59. {
  60. for (int j=0; j<M; ++j)
  61. printf (" %4.1d ", arr[i][j]);
  62.  
  63. printf ("\n");
  64. }
  65.  
  66. SetConsoleTextAttribute(hStdout, 23);
  67. printf ("sravneniy: %d, obmenov: %d.\n", sravnenii, obmenov);
  68. sravnii[0]=sravnenii;
  69. perestanovok[0]=obmenov;
  70. }
  71. /////////////////////////////////////////////////Сортировка пузырем////////////////////////////////////////////////////////////////
  72. void select(int N,int M, int **arr) //Функция сортировки отбора
  73. {
  74. HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  75. SetConsoleTextAttribute(hStdout, 10);
  76. printf("\nSort otbor\n");
  77. SetConsoleTextAttribute(hStdout, 15);
  78. int sravnenii = 0, obmenov = 0;
  79. int mas[100];
  80. int count = 0;
  81. for (int i=0; i<M; ++i)
  82. {
  83. count=0;
  84. for (int j=0;j<N;j++)
  85. {
  86. if (arr[j][i]%2==0)
  87. {
  88. mas[count]=arr[j][i];
  89. count++;
  90. }
  91. }
  92.  
  93. for (int j=0; j<count; j++)
  94. {
  95. int sel = j;
  96. for (int k=j; k<count; k++)
  97. {
  98. if (mas[k] > mas[sel])
  99. sel = k;
  100. ++sravnenii;
  101. }
  102. swap (mas[sel], mas[j]);
  103. ++obmenov;
  104. }
  105.  
  106. count=0;
  107. for (int j=0;j<N;j++)
  108. {
  109. if (arr[j][i]%2==0)
  110. {
  111. arr[j][i]=mas[count];
  112. count++;
  113. }
  114. }
  115. }
  116. for (int i=0; i<N; ++i)
  117. {
  118. for (int j=0; j<M; ++j)
  119. printf (" %4.1d ", arr[i][j]);
  120. printf ("\n");
  121. }
  122. SetConsoleTextAttribute(hStdout, 23);
  123. printf ("sravneniy: %d, obmenov: %d.\n",sravnenii, obmenov);
  124. sravnii[1]=sravnenii;
  125. perestanovok[1]=obmenov;}
  126. /////////////////////////////////////////////////Сортировкa вставка////////////////////////////////////////////////////////////////
  127. void insert(int N,int M, int **arr)
  128. {
  129. HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  130. SetConsoleTextAttribute(hStdout, 10);
  131. printf("\nSort vstavka.\n");
  132. SetConsoleTextAttribute(hStdout, 15);
  133. int sravnenii = 0, obmenov = 0;
  134. int mas[100];
  135. int count = 0;
  136. for (int i=0; i<M; ++i)
  137. {
  138. count=0;
  139. for (int j=0;j<N;j++)
  140. {
  141. if (arr[j][i]%2==0)
  142. {
  143. mas[count]=arr[j][i];
  144. count++;
  145. }
  146. }
  147.  
  148. for (int j=0; j<count; j++)
  149. { int x = mas[j];
  150. int k;
  151. for (k=j; k>0 && mas[k-1]<x; k--)
  152. { mas[k] = mas[k-1];
  153. ++sravnenii, ++obmenov;
  154. }
  155. mas[k] = x;
  156. ++obmenov;
  157. }
  158. count=0;
  159. for (int j=0;j<N;j++)
  160. {
  161. if (arr[j][i]%2==0)
  162. {
  163. arr[j][i]=mas[count];
  164. count++;
  165. }
  166. }
  167. }
  168. for (int i=0; i<N; ++i)
  169. {
  170. for (int j=0; j<M; ++j)
  171. printf (" %4.1d ", arr[i][j]);
  172. printf ("\n");
  173. }
  174. SetConsoleTextAttribute(hStdout, 23);
  175. printf ("sravneniy: %d, obmenov: %d.\n",sravnenii, obmenov);
  176. sravnii[2]=sravnenii;
  177. perestanovok[2]=obmenov;}
  178. /////////////////////////////////////////////////Сортировкa Шелла//////////////////////////////////////////////////////////////////
  179. void shell (int N,int M, int **arr)
  180. {
  181. HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  182. SetConsoleTextAttribute(hStdout, 10);
  183. printf("\nSort Shell.\n");
  184. SetConsoleTextAttribute(hStdout, 15);
  185. int sravnenii = 0, obmenov = 0;
  186. int mas[100];
  187. int count = 0;
  188. for (int i=0; i<M; ++i)
  189. {
  190. count=0;
  191. for (int j=0;j<N;j++)
  192. {
  193. if (arr[j][i]%2==0)
  194. {
  195. mas[count]=arr[j][i];
  196. count++;
  197. }
  198. }
  199. for (int j=0; j+1<count; j++)
  200. {
  201. ++sravnenii;
  202. if (mas[j+1] < mas[j])
  203. {
  204. swap (mas[j+1], mas[j]);
  205. ++obmenov;
  206. }
  207. }
  208. for (int j=0; j+1<count; j++)
  209. {
  210. ++sravnenii;
  211. if (mas[j] < mas[j+1])
  212. {
  213. swap (mas[j], mas[j+1]);
  214. ++obmenov;
  215. }
  216. }
  217. for (;;)
  218. {
  219. bool any = false;
  220. for (int j=0; j<count; j++)
  221. for (int k=1; k<count; k++)
  222. {
  223. if (mas[k-1] < mas[k])
  224. {
  225. swap (mas[k-1], mas[k]);
  226. ++obmenov;
  227. }
  228. ++sravnenii;
  229. }
  230. if (!any) break;
  231. }
  232.  
  233. count=0;
  234. for (int j=0;j<N;j++)
  235. {
  236. if (arr[j][i]%2==0)
  237. {
  238. arr[j][i]=mas[count];
  239. count++;
  240. }
  241. }
  242. }
  243.  
  244. for (int i=0; i<N; ++i)
  245. {
  246. for (int j=0; j<M; ++j)
  247. printf (" %4.1d ", arr[i][j]);
  248. printf ("\n");
  249. }
  250. SetConsoleTextAttribute(hStdout, 23);
  251. printf ("sravneniy: %d, obmenov: %d.\n",sravnenii, obmenov);
  252. sravnii[3]=sravnenii;
  253. perestanovok[3]=obmenov;}
  254. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  255. void quick_sort (int a[50], int l, int r, int & sravnenii, int & obmenov)
  256. {
  257. int i = l, j = r;
  258. int x = a[(l+r)/2];
  259. ++obmenov;
  260. do
  261. {
  262. ++sravnenii;
  263. while (a[i] > x)
  264. {
  265. i++;
  266. ++sravnenii;
  267. }
  268. ++sravnenii;
  269. while (x > a[j])
  270. {
  271. j--;
  272. ++sravnenii;
  273. }
  274. if (i <= j)
  275. {
  276. swap ( a[i++],a[j--]);
  277. ++obmenov;
  278. }
  279. }while (i <= j);
  280. if (i < r)
  281. quick_sort (a, i, r,sravnenii, obmenov);
  282. if (l < j)
  283. quick_sort (a, l, j, sravnenii, obmenov);}
  284. /////////////////////////////////////////////////Быстрая сортировка////////////////////////////////////////////////////////////////
  285. void qs (int N,int M, int **arr)
  286. { HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  287. SetConsoleTextAttribute(hStdout, 10);
  288. printf("\n Bistr sort.\n");
  289. SetConsoleTextAttribute(hStdout, 15);
  290. int sravnenii = 0, obmenov = 0;
  291. int mas[100];
  292. int count = 0;
  293. for (int i=0; i<M; ++i)
  294. {
  295. count=0;
  296. for (int j=0;j<N;j++)
  297. {
  298. if (arr[j][i]%2==0)
  299. {
  300. mas[count]=arr[j][i];
  301. count++;
  302. }
  303. }
  304. quick_sort(mas, 0,count-1, sravnenii, obmenov);
  305. count=0;
  306. for (int j=0;j<N;j++)
  307. {
  308. if (arr[j][i]%2==0)
  309. {
  310. arr[j][i]=mas[count];
  311. count++;
  312. }
  313. }
  314. }
  315. for (int i=0; i<N; ++i)
  316. {for (int j=0; j<M; ++j)
  317. printf (" %4.1d ", arr[i][j]);
  318. printf ("\n");
  319. }
  320. SetConsoleTextAttribute(hStdout, 23);
  321. printf ("sravneniy: %d, obmenov: %d.\n", sravnenii, obmenov);
  322. sravnii[4]=sravnenii;
  323. perestanovok[4]=obmenov;}
  324. /////////////////////////////////////////////////Задаем массив////////////////////////////////////////////////////////////////////
  325. void main(int argc, _TCHAR* argv[])
  326. {
  327. //setlocale (0, "");
  328. srand (unsigned(time(NULL)));
  329. int N, M;
  330. printf ("Enter matrix size: \n");
  331. printf ("Enter N: ");
  332. cin >> N;
  333. printf ("Enter M: ");
  334. cin >> M;
  335. int ** arr = new int * [N];
  336. for (int i=0; i<N; i++)
  337. arr [i] = new int [M];
  338.  
  339. for (int i=0; i<N; i++)
  340. for (int j=0; j<M; j++)
  341. arr [i][j] = ((rand()%200-100));
  342. printf ("------------Matrix------------\n");
  343. for (int i=0; i<N; i++)
  344. {
  345. for (int j=0; j<M; j++)
  346. printf(" %4.1d ", arr[i][j]);
  347. printf("\n");
  348. }
  349. printf ("\n");
  350. //for (int i=0; i<N; i++)
  351. //delete [] Arr[i];
  352. //delete [] Arr;
  353.  
  354.  
  355.  
  356. printf("---------------------------------------------------------- \n");
  357.  
  358. bubble_sort(N, M, arr);
  359. select(N,M,arr);
  360. insert(N, M, arr);
  361. shell (N,M,arr);
  362. qs (N,M,arr);
  363. }
Add Comment
Please, Sign In to add comment