Added MergeSort Function for Navdata
This commit is contained in:
parent
c41f19811f
commit
ef4d44d7d2
@ -91,5 +91,50 @@ namespace EFB.Models
|
|||||||
return BinarySearch(ref data, midpoint, end, target);
|
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<NavdataModel> combined = new List<NavdataModel>();
|
||||||
|
|
||||||
|
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<NavdataModel> data, NavdataModel value, ref int pointer){
|
||||||
|
pointer++;
|
||||||
|
data.Add(value);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user