Guest User

Untitled

a guest
Nov 24th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.93 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. #include <iomanip>
  9.  
  10. using namespace std;
  11. unsigned int stime = (unsigned) time(NULL)/2;
  12. srand(stime);
  13. //Пузырек
  14.  
  15. void bubblesort1(int * a, int n,int data[][2])
  16. {
  17. int i, j;
  18. int lasts=n;
  19. for (i = lasts - 1; i > 0; i--)
  20. {
  21. lasts=0;
  22. for (j = 0; j < i; j++)
  23. {
  24. data[0][0]++;
  25. if (a[j] > a[j + 1])
  26. {
  27. data[0][1]++;
  28. swap( a[j], a[j + 1] );
  29. lasts=j+1;
  30. }
  31. }
  32. i=lasts;
  33. }
  34. }
  35.  
  36. void bubblesort2(int ** a, int n,int m,int data[][2])
  37. {
  38. int i, j;
  39. int lasts=m;
  40. for (i = lasts - 1; i > 0; i--)
  41. {
  42. lasts=0;
  43. for (j = 0; j < i; j++)
  44. {
  45. data[0][0]++;
  46. if (a[j][n] > a[j + 1][n])
  47. {
  48. data[0][1]++;
  49. swap( a[j][n], a[j + 1][n]);
  50. lasts=j+1;
  51. }
  52. }
  53. i=lasts;
  54. }
  55. }
  56. //вставки
  57. void insert1(int * arr,int n,int data[][2])
  58. {
  59. int temp,j;
  60. for (int i = 1; i < n; i++)
  61. {
  62. temp = arr[i];
  63. for ( j = i - 1; j >= 0; j--)
  64. {
  65. data[1][0]++;
  66. if (arr[j] <= temp) {
  67. break;
  68. }
  69. arr[j+1] = arr[j];
  70. }
  71. if(i!=j+1)
  72. {
  73. arr[j+1] = temp;
  74. data[1][1]++;
  75. }
  76. }
  77. }
  78.  
  79.  
  80. void insert2(int** arr,int n,int m,int data[][2])
  81. {
  82. int temp,j;
  83. for (int i = 1; i < m; i++)
  84. {
  85. temp = arr[i][n];
  86. for ( j = i - 1; j >= 0; j--)
  87. {
  88. data[1][0]++;
  89. if (arr[j][n] <=temp) {
  90. break;
  91. }
  92. arr[j+1][n] = arr[j][n];
  93. }
  94. if(i!=j+1)
  95. {
  96. arr[j+1][n] = temp;
  97. data[1][1]++;
  98. }
  99. }
  100. }
  101. //Шелл
  102. void shell1(int *arr, int n,int data[][2])
  103. {
  104.  
  105. register int i, j, gap, k;
  106. char x, a[5];
  107.  
  108. a[0]=9; a[1]=5; a[2]=3; a[3]=2; a[4]=1;
  109.  
  110. for(k=0; k < 5; k++) {
  111. gap = a[k];
  112. for(i=gap; i < n; ++i) {
  113. x = arr[i];
  114. data[2][0]++;
  115. for(j=i-gap; (j >= 0)&&(x < arr[j]) ; j=j-gap)
  116. {
  117. data[2][0]++;
  118. arr[j+gap] = arr[j];
  119. }
  120. if(i!=j+gap)
  121. {
  122. data[2][1]++;
  123. arr[j+gap] = x;
  124. }
  125. }
  126. }
  127. }
  128.  
  129. void shell2(int **arr, int n,int m,int data[][2])
  130. {
  131.  
  132. register int i, j, gap, k;
  133. char x, a[5];
  134.  
  135. a[0]=9; a[1]=5; a[2]=3; a[3]=2; a[4]=1;
  136.  
  137. for(k=0; k < 5; k++)
  138. {
  139. gap = a[k];
  140. for(i=gap; i < m; ++i)
  141. {
  142. x = arr[i][n];
  143. data[2][0]++;
  144. for(j=i-gap; (j >= 0)&&(x <arr[j][n]) ; j=j-gap)
  145. {
  146. data[2][0]++;
  147. arr[j+gap][n] = arr[j][n];
  148. }
  149. if(j+gap!=i)
  150. {
  151. data[2][1]++;
  152. arr[j+gap][n] = x;
  153. }
  154. }
  155. }
  156. }
  157.  
  158. //Выбором
  159. void choose1(int* arr,int n,int data[][2])
  160. {
  161. for (int i = 0; i < n - 1; ++i) {
  162. int min_i = i;
  163. for (int j = i + 1; j < n; ++j) {
  164. if (arr[j] < arr[min_i]) {
  165. min_i = j;
  166. }
  167. data[3][0]++;
  168. }
  169. if(i!=min_i)
  170. {
  171. swap(arr[i],arr[min_i]);
  172. data[3][1]++;
  173. }
  174. }
  175. }
  176.  
  177. void choose2(int **arr,int n,int m,int data[][2])
  178. {
  179. for (int i = 0; i < m - 1; ++i) {
  180. int min_i = i;
  181. for (int j = i + 1; j < m; ++j) {
  182. if (arr[j][n] < arr[min_i][n]) {
  183. min_i = j;
  184. }
  185. data[3][0]++;
  186. }
  187. if(i!=min_i)
  188. {
  189. swap(arr[i][n],arr[min_i][n]);
  190. data[3][1]++;
  191. }
  192. }
  193. }
  194.  
  195. //быстрая
  196. void qs1(int* arr,int first, int last,int data[][2])
  197. {
  198. int i = first, j = last, x = arr[(first + last) / 2];
  199.  
  200. do {
  201. while (arr[i] < x)
  202. {
  203. i++;
  204. data[4][0]++;
  205. }
  206. while (arr[j] > x)
  207. {
  208. data[4][0]++;
  209. j--;
  210. }
  211.  
  212. if(i <= j) {
  213. if (i < j)
  214. {
  215. if(arr[i]!=arr[j])
  216. {
  217. swap(arr[i], arr[j]);
  218. data[4][1]++;
  219. }
  220. }
  221. i++;
  222. j--;
  223. }
  224. } while (i <= j);
  225.  
  226. if (i < last)
  227. qs1(arr, i, last,data);
  228. if (first < j)
  229. qs1(arr, first,j,data);
  230. }
  231.  
  232. void qs2(int **arr,int n,int first, int last,int data[][2])
  233. {
  234. int i = first, j = last, x = arr[(first + last) / 2][n];
  235.  
  236. do {
  237. while (arr[i][n] < x)
  238. {
  239. i++;
  240. data[4][0]++;
  241. }
  242. while (arr[j][n] > x)
  243. {
  244. data[4][0]++;
  245. j--;
  246. }
  247.  
  248. if(i <= j) {
  249. if (i < j)
  250. {
  251. if(arr[i][n]!=arr[j][n])
  252. {
  253. swap(arr[i][n], arr[j][n]);
  254. data[4][1]++;
  255. }
  256. }
  257. i++;
  258. j--;
  259. }
  260. } while (i <= j);
  261.  
  262. if (i < last)
  263. qs2(arr,n, i, last,data);
  264. if (first < j)
  265. qs2(arr,n, first,j,data);
  266. }
  267.  
  268.  
  269.  
  270.  
  271. void main(int argc, _TCHAR* argv[])
  272. {
  273. int M,N;
  274. cout<<"Inp M\n";
  275. cin>>M;
  276. cout<<"Inp N\n";
  277. cin>>N;
  278. int **arr=new int* [M];
  279. int **sorta=new int* [M];
  280. int data[5][2];
  281. for(int i=0;i<5;i++)
  282. {
  283. data[i][0]=0;
  284. data[i][1]=0;
  285. }
  286. for(int i=0;i<M;i++)
  287. {
  288. arr[i]=new int [N];
  289. sorta[i]=new int [N];
  290. for(int j=0;j<N;j++)
  291. {
  292. arr[i][j]=rand()%10;//20;
  293. sorta[i][j]=arr[i][j];
  294. }
  295. }
  296.  
  297. for(int i=0;i<M;i++)
  298. {
  299. for(int j=0;j<N;j++)
  300. cout<<sorta[i][j]<<" ";
  301. cout<<"\n";
  302. }
  303. cout<<"\n";
  304. int delta;
  305. bool quit=false;
  306. //-----------------------------------------------------------------
  307. while(!quit)
  308. {
  309. for(int i=0;i<M;i+=2)
  310. {
  311. bubblesort1(sorta[i],N,data);
  312. }
  313. delta=data[0][1];
  314.  
  315. for(int i=1;i<N;i+=2)
  316. {
  317. bubblesort2(sorta,i,M,data);
  318. }
  319. if(delta==data[0][1])
  320. quit=true;
  321. }
  322. cout<<"Buble sort\n";
  323. for(int i=0;i<M;i++)
  324. {
  325. for(int j=0;j<N;j++)
  326. cout<<sorta[i][j]<<" ";
  327. cout<<"\n";
  328. }
  329.  
  330. //--------------------------------------------------------------------------
  331.  
  332. for(int i=0;i<M;i++)
  333. {
  334. for(int j=0;j<N;j++)
  335. {
  336. sorta[i][j]=arr[i][j];
  337. }
  338. }
  339.  
  340. quit=false;
  341. while(!quit)
  342. {
  343. for(int i=0;i<M;i+=2)
  344. {
  345. insert1(sorta[i],N,data);
  346. }
  347. delta=data[1][1];
  348. for(int i=1;i<N;i+=2)
  349. {
  350. insert2(sorta,i,M,data);
  351. }
  352. if(delta==data[1][1])
  353. quit=true;
  354. }
  355. cout<<"Insert sort\n";
  356. for(int i=0;i<M;i++)
  357. {
  358. for(int j=0;j<N;j++)
  359. cout<<sorta[i][j]<<" ";
  360. cout<<"\n";
  361. }
  362. //-------------------------------------------------------------------------
  363. for(int i=0;i<M;i++)
  364. {
  365. for(int j=0;j<N;j++)
  366. {
  367. sorta[i][j]=arr[i][j];
  368. }
  369. }
  370. quit=false;
  371. while(!quit)
  372. {
  373. for(int i=0;i<M;i+=2)
  374. {
  375. shell1(sorta[i],N,data);
  376. }
  377. delta=data[2][1];
  378. for(int i=1;i<N;i+=2)
  379. {
  380. shell2(sorta,i,M,data);
  381. }
  382. if(delta==data[2][1])
  383. quit=true;
  384. }
  385. cout<<"shell sort\n";
  386. for(int i=0;i<M;i++)
  387. {
  388. for(int j=0;j<N;j++)
  389. cout<<sorta[i][j]<<" ";
  390. cout<<"\n";
  391. }
  392. //-------------------------------------------------------------------------
  393. for(int i=0;i<M;i++)
  394. {
  395. for(int j=0;j<N;j++)
  396. {
  397. sorta[i][j]=arr[i][j];
  398. }
  399. }
  400. quit=false;
  401. while(!quit)
  402. {
  403. for(int i=0;i<M;i+=2)
  404. {
  405. choose1(sorta[i],N,data);
  406. }
  407. delta=data[3][1];
  408. for(int i=1;i<N;i+=2)
  409. {
  410. choose2(sorta,i,M,data);
  411. }
  412. if(delta==data[3][1])
  413. quit=true;
  414. }
  415.  
  416. cout<<"Choose sort\n";
  417. for(int i=0;i<M;i++)
  418. {
  419. for(int j=0;j<N;j++)
  420. cout<<sorta[i][j]<<" ";
  421. cout<<"\n";
  422. }
  423. //-------------------------------------------------------------------------
  424. for(int i=0;i<M;i++)
  425. {
  426. for(int j=0;j<N;j++)
  427. {
  428. sorta[i][j]=arr[i][j];
  429. }
  430. }
  431. quit=false;
  432. while(!quit)
  433. {
  434. for(int i=0;i<M;i+=2)
  435. {
  436. qs1(sorta[i],0,N-1,data);
  437. }
  438. delta=data[4][1];
  439. for(int i=1;i<N;i+=2)
  440. {
  441. qs2(sorta,i,0,M-1,data);
  442. }
  443. if(delta==data[4][1])
  444. quit=true;
  445. }
  446.  
  447. cout<<"Quick sort\n";
  448. for(int i=0;i<M;i++)
  449. {
  450. for(int j=0;j<N;j++)
  451. cout<<sorta[i][j]<<" ";
  452. cout<<"\n";
  453. }
  454. //-------------------------------------------------------------------------
  455. cout<<"Param | Bubble Insert Shell Choose Quick\n";
  456. cout<<"Compare | ";
  457. for(int i=0;i<5;i++)
  458. {
  459. cout<<setw(4)<<data[i][0]<<" ";
  460. }
  461. cout<<"\nSwap | ";
  462. for(int i=0;i<5;i++)
  463. {
  464. cout<<setw(4)<<data[i][1]<<" ";
  465. }
  466. cout<<"\n";
  467.  
  468.  
  469. system("pause");
  470. }
Add Comment
Please, Sign In to add comment