You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何面试官对我在Swift 4中实现的QuickSort算法不满意?

Hey there! 看你昨天面试初级iOS岗时卡在了快速排序的实现上,刚好这段代码我很熟悉,帮你补全并梳理下细节吧~

补全并解析你的QuickSort实现

昨天你在面试中写到一半的快速排序代码,我帮你补全了完整版本,同时拆解下关键细节,方便你理解和后续面试复用:

完整可运行代码

func sort<T: Comparable>(_ array: Array<T>) -> Array<T> {
    let arraySize = array.count
    guard arraySize > 1 else { return array }
    
    let pivot = array[arraySize / 2]
    var less = [T]()
    var equal = [T]()
    var greater = [T]()
    
    for element in array {
        if element < pivot {
            less.append(element)
        } else if element > pivot {
            greater.append(element)
        } else {
            equal.append(element) // 你之前没写完的部分
        }
    }
    
    return sort(less) + equal + sort(greater)
}

关键细节拆解

  • 泛型约束<T: Comparable>:这让函数能处理所有遵循Comparable协议的类型(比如Int、String,甚至你自定义的模型只要实现该协议就行),贴合Swift的类型安全特性,面试时主动提这点能加分哦。
  • 基准值(pivot)选择:选数组中间元素是比较稳妥的方式,能避免极端场景(比如已经完全有序的数组)导致时间复杂度退化为O(n²);如果面试官追问优化,你可以提“随机选基准值”的方案,但这个写法在面试现场更简洁直观。
  • 三分法分组:把数组拆成小于、等于、大于基准值的三个子数组,这种处理重复元素的方式比传统二分法更高效,不会让重复元素集中在某一侧增加递归次数。
  • 递归终止条件:guard arraySize > 1 else { return array }是递归的核心出口,当数组只有0或1个元素时直接返回,避免栈溢出。
  • 结果合并:递归排序完less和greater后,通过sort(less) + equal + sort(greater)合并出最终的有序数组,逻辑清晰易懂。

面试小提示

这个实现属于快速排序的三分法变种,优势是代码简洁、可读性强,非常适合面试现场书写——毕竟面试时时间有限,先确保写对、写清晰比追求极致性能更重要。如果面试官问起原地排序的实现,你可以再补充Hoare分区的写法,但这个基础版本是面试的得分基础。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:59:07