/// <summary> /// Constructs a new <see cref="Heap{T}"/> from an <see cref="IEnumerable{T}"/> /// </summary> public static Heap <T> ToHeap <T>(this IEnumerable <T> items, Comparison <T> comparison, HeapType type = HeapType.Min) where T : IComparable <T> { var heap = new Heap <T>(comparison, type); heap.AddRange(items); return(heap); }
public void ContainedMutated() { var rnd = new Random(223); for (var i = 0; i < 10; i++) // 10 attempts { var sortables = CreateRandomSortableArray(10); // Create heap with sortable objects var heap = new Heap <SortableObject>(); heap.AddRange(sortables); // Mark a random item with a new value, changing its comparable state for (var q = 0; q < 5; q++) { var _i = rnd.Next(0, sortables.Length); var _r = rnd.Next(0, sortables.Length); sortables[_i].Number = _r; // Update the items position within the heap heap.Update(sortables[_i]); } // Assert heap extraction is indeed in order var list = ExtractElements(heap); Assert.IsTrue(list.IsAscendingOrder(), "Items were not in ascending order after heap mutate"); } }
private Graph Prim() { if (!IsConnected()) { throw new InvalidOperationException("Graph is not connected"); } ResetStats(); Verticle v = verticles.First().Value; v.Visited = true; Edge[] treeEdges = new Edge[NumOfVerticles - 1]; int teIndex = 0; var edges = new Heap <Edge>(v.EdgesOut); Edge e; while (teIndex < numOfVerticles - 1) { e = GetMinUnvisitedEdge(edges); treeEdges[teIndex++] = e; v = e.To; v.Visited = true; edges.AddRange(v.EdgesOut); } return(GetSubGraph(treeEdges)); }
public static void HeapSort(this List <int> elements) { var heap = new Heap <int>(); heap.AddRange(elements); for (var i = 0; i < elements.Count; i++) { elements[i] = heap.Pop(); } }
public void ToArray() { // Create heap with 16 elements var heap = new Heap <int>(); heap.AddRange(CreateRandomIntegerArray(16)); // var array = heap.ToArray(); Assert.IsTrue(array.IsAscendingOrder(), "Items were not in ascending order from enumerate"); }