Ios swift中气泡排序的性能测试

Ios swift中气泡排序的性能测试,ios,performance,swift,bubble-sort,Ios,Performance,Swift,Bubble Sort,我正在编写几个性能基准测试,主要是为了比较跨平台工具的性能。其中之一是Swift中气泡排序的本机实现。 我将其实现如下: do{ swapped = false for (var i = 1; i < testSize; i++){ if (sortArray[i-1] > sortArray[i]){ temp = sortArray[i-1] sortArray[i-1] = sortArray[i]

我正在编写几个性能基准测试,主要是为了比较跨平台工具的性能。其中之一是Swift中气泡排序的本机实现。
我将其实现如下:

do{
    swapped = false
    for (var i = 1; i < testSize; i++){
        if (sortArray[i-1] > sortArray[i]){
            temp = sortArray[i-1]
            sortArray[i-1] = sortArray[i]
            sortArray[i] = temp
            swapped = true
        }
    }
}while(swapped == true)
do{
交换=错误
对于(变量i=1;isortArray[i]){
温度=sortArray[i-1]
sortArray[i-1]=sortArray[i]
sortArray[i]=temp
交换=真
}
}
}while(swapped==true)
在iPhone4S上运行2500个阵列几乎需要20秒。
太慢了。我使用cordova(javascript)实现了相同的代码,只需2秒钟。
我还发现,在2012年对objective c的相同测试结果进行了测试,当时本地时间约为0.6秒。
进行输入验证基准测试也会返回可比较的结果

现在我正试图找出原因。
是因为我没有正确地实现它吗?
或者Swift尚未针对此类操作进行优化?
还是仅仅因为Swift没有针对iPhone 4s等旧设备进行优化?

还是其他原因?

通过在生成设置中设置编译器优化来启用所有优化:

有三种不同的优化选项:

              None [-Onone] no optimizations, the default for debug.
           Fastest [-O] perform optimizations, the default for release.
Fastest, Unchecked [-Ounchecked] perform optimizations and disable runtime overflow checks and runtime type checks.

在执行速度测试时,应该选择
-O
,只有在检查每个可能的数组索引和溢出时才应该使用
-Ofast

显然,我犯了一个愚蠢的错误,设置了错误的优化。 LLVM的优化在列表中处于较高的位置,所以当我搜索优化时,不幸的是我最终设置了那个优化

我应该做的是用搜索函数简单地查找“优化”,它显示了所有可能的优化。

在那之后,它只是简单地将Swift代码生成的优化设置为最快[-O],以获得我期望的性能

@TheParamagneticCroissant那么为什么我可以在同一台设备上以10倍的速度在javascript中运行相同的冒泡排序呢?您编译Swift代码时启用了所有优化吗?JavaScript引擎最近在积极优化。@ParamagneticCroissant所有优化?有很多吗?我已经将代码生成中的优化级别设置为max,它没有改变任何东西Woops,更改了llvm优化,而不是swifts,现在的结果与预期的一样大约是200ms。但它并没有改变输入验证的任何内容。我还得进一步研究一下,这是我们一直得到的——人们抱怨Swift速度慢,然后他们发现他们没有正确使用编译器。