diff --git a/Algorithms/src/algs/MergeSort.cs b/Algorithms/src/algs/MergeSort.cs new file mode 100644 index 0000000..455a403 --- /dev/null +++ b/Algorithms/src/algs/MergeSort.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Threading; + +namespace Algorithms { + class MergeSort : SortingAlgorithm { + + + + + public override string GetName() { + return "Merge Sort"; + } + + public override bool IsInPlace() + { + return true; + } + + void merge(Element[] elements, Element[] elements2, int l, int m, int r) + { + int j = l, k = m + 1; + for (int i = l; i <= r; i++) + elements2[i] = elements[i]; + while((l<=m)&&(k<=r)) + { + if(elements2[l].value<=elements2[k].value) + { + elements[j++] = elements2[l++]; + } + else + { + elements[j++] = elements2[k++]; + } + + } + if(l= r) return; + int m = (l + r) / 2; + MS(elements,elements2, l, m); + MS(elements,elements2, m + 1, r); + merge(elements, elements2, l, m, r); + + } + + + protected override void SortElements(Element[] elements) { + int end = elements.Length - 1; + Element[] elements2 = new Element[elements.Length]; + MS(elements, elements2, 0, end); + } + + + + } +} diff --git a/Algorithms/src/algs/QuickSort.cs b/Algorithms/src/algs/QuickSort.cs index d434daa..182673a 100644 --- a/Algorithms/src/algs/QuickSort.cs +++ b/Algorithms/src/algs/QuickSort.cs @@ -21,19 +21,20 @@ public override bool IsInPlace() void QS(Element[] elements, int s, int e) { + //if (e <= s) return; int p, l, r; - l = s; - r = e; - p = elements[l].value; - while (l < r) - { - while (elements[l].value p) { r--; IterationTick(); } - if(l=l)&&(elements[r].value > p)) IterationTick(); + if (l <= r) SwapElements(elements, l, r); + else break; } - if (s < r ) QS(elements, s, r-1); - if (r < e) QS(elements, r+1, e); + if (l < e) QS(elements, l, e); + if (s < r ) QS(elements, s, r); } @@ -42,11 +43,11 @@ protected override void SortElements(Element[] elements) int start = 0; int end = elements.Length - 1; QS(elements, start, end); - for (int i = 1; i <= end; i++) + /* for (int i = 1; i <= end; i++) { Console.WriteLine(elements[i].value); - } + } */ } } }