我正在尝试比较这两种排序算法。 我编写了一个 vb.net 控制台程序,并使用 Excel 创建了一个 csv 文件,其中包含 10000 个在 0 到 100000 之间随机创建的整数。 插入排序似乎需要大约 10 倍的时间,这不可能是正确的,不是吗? 谁能指出我哪里错了?
module Module1
Dim unsortedArray(10000) As integer
sub main
dim startTick as long
dim endTick as long
loadDataFromFile
startTick = date.now.ticks
insertionsort
endTick = date.now.ticks
console.writeline("ticks for insertion sort = " & (endTick-startTick))
loadDataFromFile
startTick = date.now.ticks
bubblesort
endTick = date.now.ticks
console.writeline("ticks for bubble sort = " & (endTick-startTick))
end sub
sub bubbleSort
dim temp as integer
dim swapped as boolean
dim a as integer = unsortedArray.getupperbound(0)-1
do
swapped=false
for i = 0 to a
if unsortedArray(i)>unsortedArray(i+1) then
temp=unsortedArray(i)
unsortedArray(i)=unsortedArray(i+1)
unsortedArray(i+1)=temp
swapped=true
end if
next i
'a = a - 1
loop until not swapped
end sub
sub insertionSort()
dim temp as string
dim ins as integer
dim low as integer = 0
dim up as integer = unsortedArray.getupperbound(0)
console.writeline()
for i = 1 to up
temp = unsortedArray(i)
ins = i-1
while (ins >= 0) andalso (temp < unsortedArray(ins))
unsortedArray(ins+1) = unsortedArray(ins)
ins = ins -1
end while
unsortedArray(ins+1) = temp
next
end sub
sub loadDataFromFile()
dim dataItem as integer
fileopen(1,FileIO.FileSystem.CurrentDirectory & "\10000.csv", openmode.input)
'set up to loop through each row in the array
for i = 0 to 9999
input(1,dataItem)
'save that data item in correct array positon
unsortedArray(i) = dataItem
next i
fileclose(1)
end sub
最佳答案
dim temp as string
您已将临时变量声明为字符串
,而不是整数
。 VB.Net 非常乐意允许您做这种草率的事情,它会将数值转换为字符串
并返回。这是一项非常昂贵的操作。
如果您进入项目选项,请在“编译”下,帮自己一个忙并打开“Option Strict”。这将不允许像这样的隐式类型转换,并强制您修复它,向您准确显示错误所在。
由于遗留原因,默认情况下“Option Strict”处于关闭状态,只是为了允许在 vb.net 中编译写得不好的遗留 VB 代码而不会出现任何投诉。否则没有合理的理由将其关闭。
将声明更改为
Dim temp As Integer
表明插入排序确实比冒泡排序平均快大约 3-5 倍。
关于vb.net - 冒泡排序与插入排序 - 尝试编写一个程序来确定哪个更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36033133/