vb.net - 冒泡排序与插入排序 - 尝试编写一个程序来确定哪个更有效

标签 vb.net performance sorting bubble-sort insertion-sort

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

相关文章:

mysql - SELECT WHERE IN (a,b,c) 查询 : sort the results by order of condition (a, b,c)

asp.net - 在 ASP.NET 应用程序上记录 Visual Basic 异常的最佳方法是什么?

asp.net - 写入操作期间发生磁盘错误。 (来自 HRESULT : 0x8003001D (STG_E_WRITEFAULT)) 的异常

c# - 开发有效的条形码系统/代码

ruby-on-rails - 将图像从 Rails 应用程序上传到 Amazon S3 时,采取哪条最佳路线?

python - 在 Python 2.2 中对列表进行重复数据删除和排序

vb.net - 如何使用 CheckIfPrime

javascript - ng-repeat 与 ng-hide 或在 Controller 中执行此操作以提高性能?

java - 短路评估的性能影响

javascript - 最好使用 Lodash 按查找表对值进行排序