persistent 1 %Persistent 0 1 TeSorteren:%ListOfDataTypes,Comparator:TECH.Comparator.IComparator 1) { Set Links = ##class(%ListOfDataTypes).%New() Set Rechts = ##class(%ListOfDataTypes).%New() Set Midden = 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 (LinksIndex-1)) || (Rechts.Count() > (RechtsIndex-1)) { If (Links.Count() > (LinksIndex-1)) && (Rechts.Count() > (RechtsIndex-1)) { If Comparator.IsKleinerDan(Links.GetAt(LinksIndex),Rechts.GetAt(RechtsIndex)) { Do Target.Insert(Links.GetAt(LinksIndex)) Set LinksIndex = LinksIndex + 1 } Else { Do Target.Insert(Rechts.GetAt(RechtsIndex)) Set RechtsIndex = RechtsIndex + 1 } } ElseIf (Links.Count() > (LinksIndex-1)){ Do Target.Insert(Links.GetAt(LinksIndex)) Set LinksIndex = LinksIndex + 1 } ElseIf (Rechts.Count() > (RechtsIndex-1)){ Do Target.Insert(Rechts.GetAt(RechtsIndex)) Set RechtsIndex = RechtsIndex + 1 } } Quit Target ]]> %Library.CacheStorage ^TECH.Algo.Sort.MergeSortD MergeSortDefaultData ^TECH.Algo.Sort.MergeSortD ^TECH.Algo.Sort.MergeSortI ^TECH.Algo.Sort.MergeSortS listnode %%CLASSNAME