Advertisement
Guest User

Untitled

a guest
May 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.26 KB | None | 0 0
  1. using System;
  2.  
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ConsoleApp3
  9. {
  10. class MergeSort
  11. {
  12.  
  13. public static void sortowanie(int[] tab)
  14. {
  15. int liczbaPrzedzialow;
  16. int from=0;
  17. int przedzial1 = 1;
  18. int przedzial2 = 1;
  19. bool parzysta = tab.Length % 2 == 0 ? true : false;
  20. int n = 1;
  21. if (parzysta)
  22. {
  23.  
  24. }
  25. while (przedzial1 < tab.Length)
  26. {
  27. from = 0;
  28. n = 1;
  29. for( ; ; )
  30. {
  31. if (przedzial1 * n < tab.Length)
  32. {
  33. scalanie(tab, from, przedzial1, przedzial1);
  34. from = from + przedzial1*2;
  35. n++;
  36. continue;
  37. }
  38. przedzial2 = tab.Length - przedzial1*n;
  39. scalanie(tab, from, przedzial1, przedzial2);
  40. break;
  41.  
  42.  
  43. }
  44. przedzial1 = przedzial1 * 2;
  45.  
  46. }
  47.  
  48. }
  49.  
  50. public static void scalanie(int[] tab, int from1, int przedzial1, int przedzial2)
  51. {
  52. //int[] tabWynikowa = new int[tab1.Length + tab2.Length];
  53. int licznik = from1;
  54. int tab1Licznik = 0, tab2Licznik = 0;
  55.  
  56. int tab1LicznikTo = from1 + przedzial1;
  57. int tab2LicznikTo = tab1LicznikTo + przedzial2;
  58.  
  59. int[] tab1 = new int[przedzial1];
  60. int[] tab2 = new int[przedzial2];
  61. for (int i = from1; i < tab1LicznikTo; i++)
  62. {
  63. tab1[i - from1] = tab[i];
  64. }
  65. for (int i = tab1LicznikTo; i < tab2LicznikTo; i++)
  66. {
  67. tab2[i - tab1LicznikTo] = tab[i];
  68. }
  69.  
  70. while (licznik < from1+ przedzial1+przedzial2)
  71. {
  72.  
  73. if (tab1Licznik == przedzial1 && tab2Licznik < przedzial2)
  74. {
  75.  
  76. tab[licznik] = tab2[tab2Licznik];
  77.  
  78. tab2Licznik++;
  79. licznik++;
  80. continue;
  81. }
  82. if (tab2Licznik == przedzial2 && tab1Licznik < przedzial1)
  83. {
  84. tab[licznik] = tab1[tab1Licznik];
  85. tab1Licznik++;
  86. licznik++;
  87. continue;
  88. }
  89. if (tab1Licznik < przedzial1 && tab2Licznik < przedzial2 && tab1[tab1Licznik] < tab2[tab2Licznik])
  90. {
  91. tab[licznik] = tab1[tab1Licznik];
  92. tab1Licznik++;
  93. licznik++;
  94. continue;
  95. }
  96. if (tab1Licznik < przedzial1 && tab2Licznik < przedzial2 && tab1[tab1Licznik] > tab2[tab2Licznik])
  97. {
  98.  
  99. tab[licznik] = tab2[tab2Licznik];
  100. tab2Licznik++;
  101. licznik++;
  102. continue;
  103. }
  104.  
  105. if (tab1Licznik < przedzial1 && tab2Licznik < przedzial2 && tab1[tab1Licznik] == tab2[tab2Licznik])
  106. {
  107.  
  108. tab[licznik] = tab1[tab1Licznik];
  109. tab1Licznik++;
  110. licznik++;
  111.  
  112. tab[licznik] = tab2[tab2Licznik];
  113. tab2Licznik++;
  114. licznik++;
  115. continue;
  116. }
  117.  
  118.  
  119. }
  120.  
  121. }
  122. }
  123. class Sortowanie
  124. {
  125. public static int[] sortowanie(int[] tab)
  126. {
  127. int tmp;
  128. int licznik = 0;
  129. int n = 0;
  130. do
  131. {
  132. licznik = 0;
  133. for (int i = 0; i < tab.Length - 1; i++)
  134. {
  135.  
  136. if (tab[i] > tab[i + 1])
  137. {
  138. licznik++;
  139. tmp = tab[i];
  140. tab[i] = tab[i + 1];
  141. tab[i + 1] = tmp;
  142. }
  143. }
  144. n++;
  145. } while (licznik != 0);
  146. //Console.WriteLine();
  147. //Console.WriteLine(licznik);
  148. //Console.WriteLine();
  149. //Console.WriteLine(n);
  150. return tab;
  151. }
  152. }
  153. class Program
  154. {
  155.  
  156. static void Main(string[] args)
  157. {
  158. Random r = new Random();
  159. int[] test1 = new int[3];
  160. for (int i = 0; i < test1.Length; i++)
  161. {
  162. test1[i] = r.Next(0, 40);
  163. }
  164. int[] test2 = new int[5];
  165. for (int i = 0; i < test2.Length; i++)
  166. {
  167. test2[i] = r.Next(0, 40);
  168. }
  169.  
  170. //Console.WriteLine();
  171. //Console.WriteLine("----------------");
  172. //Console.WriteLine();
  173. //foreach (var item in test1)
  174. //{
  175. // Console.Write(item + " ");
  176. //}
  177. //Console.WriteLine();
  178. //Console.WriteLine("----------------");
  179. //Console.WriteLine();
  180. //foreach (var item in test2)
  181. //{
  182. // Console.Write(item + " ");
  183. //}
  184. //Console.WriteLine();
  185. //Console.WriteLine("----------------");
  186. //Console.WriteLine();
  187. //foreach (var item in test1)
  188. //{
  189. // Console.Write(item + " ");
  190. //}
  191. int[] posortowana1 = new int[10];
  192. int[] posortowana2 = new int[10];
  193. int[] scalona = new int[posortowana1.Length + posortowana2.Length];
  194. Console.WriteLine();
  195. Console.WriteLine();
  196. DateTime start = DateTime.Now;
  197. //posortowana1 = Sortowanie.sortowanie(test1);
  198. //posortowana2 = Sortowanie.sortowanie(test2);
  199. MergeSort.sortowanie(test1);
  200.  
  201.  
  202. DateTime stop = DateTime.Now;
  203.  
  204. TimeSpan czas = stop - start;
  205. foreach (var item in test1)
  206. {
  207. Console.Write(item + " ");
  208. }
  209.  
  210.  
  211. Console.WriteLine();
  212. Console.WriteLine("----------------");
  213. Console.WriteLine();
  214. start = DateTime.Now;
  215. //posortowana1 = Sortowanie.sortowanie(test1);
  216. //posortowana2 = Sortowanie.sortowanie(test2);
  217. Sortowanie.sortowanie(test2);
  218.  
  219.  
  220. stop = DateTime.Now;
  221.  
  222. TimeSpan czas2 = stop - start;
  223. foreach (var item in test2)
  224. {
  225. Console.Write(item + " ");
  226. }
  227.  
  228.  
  229. Console.WriteLine();
  230. Console.WriteLine("----------------");
  231. Console.WriteLine();
  232. Console.WriteLine();
  233. Console.WriteLine("czas sortowania merge= " + czas);
  234. Console.WriteLine();
  235. Console.WriteLine("czas sortowania normal= " + czas2);
  236. Console.ReadKey();
  237.  
  238. }
  239. }
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement