面试题答案
一键面试实现思路
- 读取文件:使用
System.IO.File.ReadAllLines
方法读取文本文件的所有行,每行内容为一个整数。 - 转换与排序:将读取到的字符串数组转换为整数数组,并使用高效的排序算法,如
Array.Sort
(.NET框架提供的优化后的排序方法)进行排序。 - 写入文件:使用
System.IO.File.WriteAllLines
方法将排序后的整数数组写入到另一个文件中。 - 性能优化:为减少内存占用,可逐行读取和写入,而不是一次性读取和存储所有数据。但考虑到
Array.Sort
方法的高效性,在数据量不是特别巨大的情况下,一次性处理也是可行的。如果数据量极大,可以考虑使用外部排序算法或分块处理的方式。
核心代码
Imports System.IO
Module Module1
Sub Main()
Dim inputFilePath As String = "input.txt"
Dim outputFilePath As String = "output.txt"
'读取文件
Dim lines() As String = File.ReadAllLines(inputFilePath)
Dim numbers(lines.Length - 1) As Integer
For i As Integer = 0 To lines.Length - 1
numbers(i) = Integer.Parse(lines(i))
Next
'排序
Array.Sort(numbers)
'写入文件
Dim sortedLines(lines.Length - 1) As String
For i As Integer = 0 To lines.Length - 1
sortedLines(i) = numbers(i).ToString()
Next
File.WriteAllLines(outputFilePath, sortedLines)
End Sub
End Module
上述代码实现了从文件读取整数、排序并写入新文件的功能。Array.Sort
方法是经过优化的排序算法,在性能上有较好表现。若数据量极大,可考虑以下优化版本:
Imports System.IO
Module Module1
Sub Main()
Dim inputFilePath As String = "input.txt"
Dim outputFilePath As String = "output.txt"
Using inputReader As New StreamReader(inputFilePath)
Using outputWriter As New StreamWriter(outputFilePath)
Dim numbers As New List(Of Integer)()
While Not inputReader.EndOfStream
numbers.Add(Integer.Parse(inputReader.ReadLine()))
End While
numbers.Sort()
For Each number As Integer In numbers
outputWriter.WriteLine(number)
Next
End Using
End Using
End Sub
End Module
此优化版本使用StreamReader
和StreamWriter
逐行读取和写入,减少内存占用,适用于处理超大型文件。