[Swift Algorithm] Merge sort

作者: sunlitamo | 来源:发表于2016-07-14 18:17 被阅读55次
    func mergeSort(array:[Int])->[Int]{
        
        //确保最终将count 为N 的数列分解成N个count为一个的数列群
        //本条确认条件即为退出recursive call 的一个基准条件
        guard array.count > 1 else { return array }
        
        //将count > 1的数列 从中间一分为二
        let midIdx = array.count / 2
        
        //recursive call
        let leftArray = mergeSort(Array(array[0 ..< midIdx]))
        let rightArray = mergeSort(Array(array[midIdx ..< array.count]))
        
        // 合并数列的核心代码
        return merge(leftArray,rightArr: rightArray)
    }
    
    func merge(leftArr:[Int],rightArr:[Int]) -> [Int]{
        var leftIdx = 0
        var rightIdx = 0
        var sorted = [Int]()
        
        while leftIdx < leftArr.count && rightIdx < rightArr.count{
        
            let nLeft = leftArr[leftIdx]
            let nRight = rightArr[rightIdx]
           //在不超过各自数列范围的情况下,进行 1对1 对比
           //数字小的一方将被优先排列到最终数组前列,同时该数列的游尺加1,然后继续进行双方的 1对1 对比
            if nLeft < nRight {
                sorted.append(nLeft)
                leftIdx += 1
            }
            else if nLeft > nRight {
                sorted.append(nRight)
                rightIdx += 1
            }
            else {
                //如果双方
                sorted.appendContentsOf([nLeft,nRight])
                
                leftIdx += 1
                rightIdx += 1
            }
        }
        while leftIdx < leftArr.count{
            sorted.append(leftArr[leftIdx])
            leftIdx += 1
        }
        
        while rightIdx < rightArr.count {
            sorted.append(rightArr[rightIdx])
            rightIdx += 1
        }
        
        return sorted
    
    }
    
    

    相关文章

      网友评论

        本文标题:[Swift Algorithm] Merge sort

        本文链接:https://www.haomeiwen.com/subject/tyoejttx.html