From ef4d44d7d2eab61872897c4d85915f5c713e13af Mon Sep 17 00:00:00 2001 From: Luke Else Date: Mon, 31 Jan 2022 22:50:09 +0000 Subject: [PATCH] Added MergeSort Function for Navdata --- Models/NavdataModel.cs | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Models/NavdataModel.cs b/Models/NavdataModel.cs index ddff227..7560776 100644 --- a/Models/NavdataModel.cs +++ b/Models/NavdataModel.cs @@ -90,6 +90,51 @@ namespace EFB.Models } return BinarySearch(ref data, midpoint, end, target); } + + public static NavdataModel[] MergeSort(ref NavdataModel[] data, int start, int end) + { + if (start == end) + {//If we have narrowed it down to a single Item + return new NavdataModel[] { data[start] }; + } + + int midpoint = start + ((end - start) / 2); + + //Split the data down to the left and the right portions + NavdataModel[] left = MergeSort(ref data, start, midpoint); + NavdataModel[] right = MergeSort(ref data, midpoint+1, end); + + List combined = new List(); + + int leftPointer = 0; + int rightPointer = 0; + + while (leftPointer <= left.Length-1 || rightPointer <= right.Length-1) + { + if (leftPointer == left.Length) + {//Take a value only from the right (left pointer had reached the end) + AddValue(ref combined, right[rightPointer], ref rightPointer); + }else if (rightPointer == right.Length) + {//Take a value only from the left (right pointer has reached the end) + AddValue(ref combined, left[leftPointer], ref leftPointer); + }else{ + if (String.Compare(left[leftPointer].Name, right[rightPointer].Name) <= 0) + {//Take a value from the left hand side of the list. (Left value is considered 'smaller') + AddValue(ref combined, left[leftPointer], ref leftPointer); + }else{//Take a value from the right (right value is considered smaller) + AddValue(ref combined, right[rightPointer], ref rightPointer); + } + } + } + + return combined.ToArray(); + + } + + private static void AddValue(ref List data, NavdataModel value, ref int pointer){ + pointer++; + data.Add(value); + } } } \ No newline at end of file