我正在尝试比较这两种排序算法。
我编写了一个vb.net控制台程序,并使用excel创建了10000个整数(随机创建在0到100000之间)的csv文件。
插入排序似乎需要大约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
您已将临时变量声明为
string
而不是integer
。 VB.Net非常高兴允许您做这种草率的事情,它将把数值转换为string
并返回。这是非常昂贵的操作。如果进入项目选项,请在“编译”下,帮自己一个忙,然后打开“选项严格”。这样将不允许进行隐式类型转换,并迫使您对其进行修复,从而准确显示出错误的出处。
出于遗留原因,默认情况下“ Option Strict”处于关闭状态,只是为了允许在vb.net中毫无问题地编译编写错误的遗留VB代码。否则,没有理智的理由将其关闭。
将声明更改为
Dim temp As Integer
揭示了插入排序确实比气泡平均快大约3-5倍。