数组的整体大小没有发生变化,运行效率如图:
可以看到算法的主要耗时部分lesser和greater的执行此时由之前的35次变为45次了,那么sorted方法的执行效率又如何呢?
你没有看错!对于快排最头疼的顺序性数组,sorted的重复次数只有n次!说明在面对这种类型的数组的时候sorted方法进行过判断,直接输出了。当然闭包中的语句一定要合适,“千万不要使用等于号!”,比如改写a: var a:[Int] = [1,1,2,2,3,1,1,1,1]
没有等于号的情况:
如果你写上等于号:
OMG!效果一样的前提下效率差了好多。
另外一种极端情况,完全逆序一个数组:
当然快排的时间和完全相同的元素一样:
如果觉得数量级太小不过瘾,那么来个大号的数组:
现在修改a为500个随机的100以内的正整数: var a:[UInt32] = [] for _ in 0..<500{ a.append(arc4random() % 100) }
同时比较两种排序方式,下面是快排的:
下面是sorted的效率:
大家可以试试,规模越大的数组效率差别越明显,sorted以肉眼可见的速度秒杀了快排!
Swift 的详细介绍:请点这里