我正在尝试比较这两种排序算法。
我编写了一个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倍。

08-24 16:44
查看更多