Imports System.Collections.Generic Imports System.Diagnostics Imports System.IO Module Heapsort Function ReadFile(fileSpec As String) As List(Of Integer) Console.Write("READING INPUT FILE...") Dim values As New List(Of Integer)() For Each line In File.ReadLines(fileSpec) If Not String.IsNullOrWhiteSpace(line) Then values.Add(Integer.Parse(line)) End If Next Console.WriteLine("DONE.") Return values End Function Sub SaveFile(values As List(Of Integer), fileSpec As String) Console.Write("SAVING OUTPUT FILE...") File.WriteAllLines(fileSpec, values.ConvertAll(Function(value) value.ToString())) Console.WriteLine("DONE.") End Sub Sub SiftDown(values As List(Of Integer), root As Integer, finish As Integer) While 2 * root + 1 < finish Dim child = 2 * root + 1 If child + 1 < finish AndAlso values(child) < values(child + 1) Then child += 1 If values(root) >= values(child) Then Exit Sub Dim temp = values(root) values(root) = values(child) values(child) = temp root = child End While End Sub Function PerformSort(values As List(Of Integer)) As Double Console.Write("SORTING ELEMENTS...") Dim timer = Stopwatch.StartNew() For start = values.Count \ 2 - 1 To 0 Step -1 : SiftDown(values, start, values.Count) : Next For finish = values.Count - 1 To 1 Step -1 Dim temp = values(0) values(0) = values(finish) values(finish) = temp SiftDown(values, 0, finish) Next timer.Stop() Console.WriteLine("DONE.") Return timer.Elapsed.TotalSeconds End Function Sub Main() Console.WriteLine("***HEAPSORT VB .NET***") Dim values = ReadFile("D:/Sorting/Sorting_Input.txt") Dim elapsed = PerformSort(values) SaveFile(values, "D:/Sorting/Ouput_VB.NET.txt") Console.WriteLine("***RUN COMPLETE***") Console.WriteLine("HEAPSORT TOOK {0:F6} SECONDS.", elapsed) End Sub End Module