listExt name
This commit is contained in:
parent
c1b42cc04d
commit
6ea03f65cb
|
@ -1,96 +0,0 @@
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace Sorting
|
|
||||||
{
|
|
||||||
public static class ListExt
|
|
||||||
{
|
|
||||||
public static string AsString(this List<int> list)
|
|
||||||
{
|
|
||||||
return "(" + string.Join(", ", list.Select(x => x.ToString())) + ")";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class HeapSort : ISortable
|
|
||||||
{
|
|
||||||
public List<int> Sort(List<int> list)
|
|
||||||
{
|
|
||||||
return SortRecur(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal List<int> MergeSortedLists(List<int> a, List<int> b)
|
|
||||||
{
|
|
||||||
var result = new List<int>();
|
|
||||||
var aCounter = 0;
|
|
||||||
var bCounter = 0;
|
|
||||||
|
|
||||||
Debug.WriteLine("merging" + a.AsString() + " with " + b.AsString());
|
|
||||||
|
|
||||||
while (aCounter < a.Count && bCounter < b.Count)
|
|
||||||
{
|
|
||||||
var currA = a[aCounter];
|
|
||||||
var currB = b[bCounter];
|
|
||||||
|
|
||||||
if (currA < currB)
|
|
||||||
{
|
|
||||||
result.Add(currA);
|
|
||||||
aCounter++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.Add(currB);
|
|
||||||
bCounter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aCounter < a.Count)
|
|
||||||
{
|
|
||||||
result.AddRange(AddRemainder(a, aCounter));
|
|
||||||
}
|
|
||||||
if (bCounter < b.Count)
|
|
||||||
{
|
|
||||||
result.AddRange(AddRemainder(b, bCounter));
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<int> AddRemainder(List<int> list, int index)
|
|
||||||
{
|
|
||||||
List<int> result = new List<int>();
|
|
||||||
for (var i = index; i < list.Count; i++)
|
|
||||||
{
|
|
||||||
result.Add(list[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<int> SortRecur(List<int> list)
|
|
||||||
{
|
|
||||||
Debug.WriteLine("sorting " + list.AsString());
|
|
||||||
|
|
||||||
if (list.Count == 2)
|
|
||||||
{
|
|
||||||
return new List<int>
|
|
||||||
{
|
|
||||||
list[0] < list[1] ? list[0] : list[1],
|
|
||||||
list[0] < list[1] ? list[1] : list[0]
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if (list.Count <= 1)
|
|
||||||
{
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
var halfIndex = list.Count / 2;
|
|
||||||
|
|
||||||
var left = list.TakeWhile((number, i) => i < halfIndex).ToList();
|
|
||||||
var right = list.Except(left).ToList();
|
|
||||||
return MergeSortedLists(
|
|
||||||
SortRecur(left),
|
|
||||||
SortRecur(right));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue