
问题
请使用快速排序把数组从低到高排序。
如数组 [ 10, 0, 3, 9, 2, 14, 8, 27, 1, 5, 8, -1, 26 ]
解答
快速排序是历史上最有名的算法之一,也是递归算法的经典案例。
直接来看看Swift版本的源码:
func quicksort<T: Comparable>(_ a: [T]) -> [T] {
guard a.count > 1 else { return a }
let pivot = a[a.count/2]
let less = a.filter { $0 < pivot }
let equal = a.filter { $0 == pivot }
let greater = a.filter { $0 > pivot }
return quicksort(less) + equal + quicksort(greater)
}
对于C语言的源码,高级语言读起来更容易理解。
上述的代码中,首先取数组中的位置中间的值为中轴值 (如取中轴值是优化快速排序算法的关键,有兴趣的可以单独研究)。
所有比中轴值小的元素都在less数组内,而等于中轴值的元素在equal数组里,大于中轴值的元素在greater数组内,注意下范型T实现了“Comparable”,这样才能执行元素之间比较大小。
在完成三个数组赋值以后,递归算法这时显现出了可魔力,只需对less 和 greater数组进行快排,然后把equal数组拼接在一起即可。
来看张运行图加深理解

注意的是算法里反复调用filter方法,无论空间和时间上效率都有很大的改进空间。
更多
获取更多内容请关注微信公众号豆志昂扬:
- 直接添加公众号豆志昂扬;
- 微信扫描下图二维码;

网友评论