Index: TECH/Algo/Sort/MergeSort.cls.xml =================================================================== diff -u --- TECH/Algo/Sort/MergeSort.cls.xml (revision 0) +++ TECH/Algo/Sort/MergeSort.cls.xml (revision 423) @@ -0,0 +1,68 @@ + + + +%RegisteredObject + + +1 +TeSorteren:%ListOfDataTypes,Comparator:TECH.Comparator.IComparator + 1) + { + Set Links = ##class(%ListOfDataTypes).%New() + Set Rechts = ##class(%ListOfDataTypes).%New() + #dim Midden As %Integer = TeSorteren.Count() \ 2 + For i=1:1:Midden Do Links.Insert(TeSorteren.GetAt(i)) + For i=Midden+1:1:TeSorteren.Count() Do Rechts.Insert(TeSorteren.GetAt(i)) + + Do ..Sort(Links,Comparator) + Do ..Sort(Rechts,Comparator) + + Do TeSorteren.Clear() + + Do ..Merge(TeSorteren, Links, Rechts, Comparator) + } + + Quit TeSorteren +]]> + + + +1 +Target:%ListOfDataTypes,Links:%ListOfDataTypes,Rechts:%ListOfDataTypes,Comparator:TECH.Comparator.IComparator +1 +%ListOfDataTypes + 0) || (Rechts.Count() > 0) + { + If (Links.Count() > 0) && (Rechts.Count() > 0) + { + If Comparator.IsKleinerDan(Links.GetAt(1),Rechts.GetAt(1)) + { + Do Target.Insert(Links.GetAt(1)) + Do Links.RemoveAt(1) + } + Else + { + Do Target.Insert(Rechts.GetAt(1)) + Do Rechts.RemoveAt(1) + } + } + ElseIf (Links.Count() > 0) + { + Do Target.Insert(Links.GetAt(1)) + Do Links.RemoveAt(1) + } + ElseIf (Rechts.Count() > 0) + { + Do Target.Insert(Rechts.GetAt(1)) + Do Rechts.RemoveAt(1) + } + } + Quit Target +]]> + + + + +