Advertisement
thinhckhcmus

ThuatToanSX(InsertionSort,BubbleSort,ShakerSort,ShellSort)

Oct 1st, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3.  
  4. void XuatMang(int a[], int n)
  5. {
  6. for (int i = 0; i < n; i++)
  7. printf("%d ", a[i]);
  8.  
  9. printf("\n");
  10. }
  11.  
  12. void HoanVi(int &x, int &y)
  13. {
  14. int temp = x;
  15. x = y;
  16. y = temp;
  17. }
  18.  
  19. void SelectionSort(int a[], int n)
  20. {
  21. for (int i =0; i < n; i++)
  22. {
  23. int viTriMin = i;
  24. for (int j = i + 1; j < n; j++)
  25. {
  26. if (a[j] < a[viTriMin]) {
  27. viTriMin = j;
  28. }
  29. }
  30.  
  31. HoanVi(a[viTriMin], a[i]);
  32. XuatMang(a, n);
  33. }
  34. }
  35.  
  36. int TimViTriChen(int a[], int start, int end, int x)
  37. {
  38. for (int i = start; i <= end; i++)
  39. {
  40. if (a[i] > x)
  41. {
  42. return i;
  43. }
  44. }
  45. return end + 1;
  46. }
  47.  
  48. void ChenX(int a[], int start, int end, int viTriCanChen, int x)
  49. {
  50. for (int i = end; i >= viTriCanChen; i--)
  51. {
  52. a[i + 1] = a[i];
  53. }
  54.  
  55. a[viTriCanChen] = x;
  56. }
  57.  
  58. void InsertionSort(int a[], int n)
  59. {
  60. for (int i = 1; i < n; i++)
  61. {
  62. int x = a[i];
  63. //Tim vi tri chen trong mang a tu vi tri 0 -> i-1
  64. int viTriCanChen = TimViTriChen(a, 0, i - 1, x);
  65.  
  66. //Chen x tai vi tri da tim ra
  67. ChenX(a, 0, i - 1, viTriCanChen, x);
  68.  
  69. XuatMang(a, n);
  70. }
  71. }
  72.  
  73. void InsertionSort2(int a[], int n)
  74. {
  75. for (int i = 1; i < n; i++)
  76. {
  77. int x = a[i];
  78. int j;
  79. for (j = i - 1; j >= 0; j--)
  80. {
  81. if (a[j] > x)
  82. {
  83. a[j + 1] = a[j];
  84. }
  85. else {
  86. break;
  87. }
  88. }
  89.  
  90. a[j + 1] = x;
  91.  
  92. XuatMang(a, n);
  93. }
  94. }
  95.  
  96.  
  97. void BubbleSort(int a[], int n)
  98. {
  99. int day = n - 1;
  100. int bm = 0;
  101. while (bm < day)
  102. {
  103. int i = day;
  104. while (i > bm)
  105. {
  106. if (a[i] < a[i - 1]) {
  107. HoanVi(a[i], a[i - 1]);
  108. }
  109. i--;
  110.  
  111. XuatMang(a, n);
  112. }
  113. bm++;
  114. }
  115. }
  116.  
  117.  
  118. void ShakerSort(int a[], int n)
  119. {
  120. int day = n - 1;
  121. int bm = 0;
  122. int noiHoanViCuoiCung = day;
  123. while (bm < day)
  124. {
  125. int i = day;
  126. while (i > bm)
  127. {
  128. if (a[i] < a[i - 1]) {
  129. HoanVi(a[i], a[i - 1]);
  130. noiHoanViCuoiCung = i;
  131. }
  132. i--;
  133. }
  134. bm = noiHoanViCuoiCung;
  135.  
  136. i = bm;
  137. while (i < day)
  138. {
  139. if (a[i] > a[i + 1]) {
  140. HoanVi(a[i], a[i + 1]);
  141. noiHoanViCuoiCung = i;
  142. }
  143. i++;
  144. }
  145. day = noiHoanViCuoiCung;
  146. }
  147.  
  148. }
  149.  
  150. void ShellSort(int a[], int n)
  151. {
  152. int kichThuocSo[] = { 5, 3, 1 };
  153. int m = 3;
  154. for (int i = 0; i < m; i++)
  155. {
  156. int buocNhay = kichThuocSo[i];
  157.  
  158. int viTriDauTienCuaSo = 0;
  159.  
  160. while (viTriDauTienCuaSo < buocNhay)
  161. {
  162. int j = viTriDauTienCuaSo + buocNhay;
  163.  
  164. while (j < n)
  165. {
  166. int x = a[j];
  167. int k = j - buocNhay;
  168. while (k >= 0 && x < a[k])
  169. {
  170. a[k + buocNhay] = a[k];
  171. k -= buocNhay;
  172. }
  173. a[k + buocNhay] = x;
  174. j += buocNhay;
  175. }
  176.  
  177. viTriDauTienCuaSo++;
  178. }
  179. }
  180. }
  181.  
  182. void main()
  183. {
  184. int a[] = { 23, 17, 97, 44, 35, 10, 12, 8, 5, 78};
  185. int n = 10;
  186. printf("Mang truoc khi sap xep: \n");
  187. XuatMang(a, n);
  188.  
  189. ShellSort(a, n);
  190.  
  191. printf("Mang sau khi sap xep: \n");
  192. XuatMang(a, n);
  193.  
  194. system("pause");
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement