美文网首页
算法学习——归并排序

算法学习——归并排序

作者: 松花江以南 | 来源:发表于2020-04-03 22:22 被阅读0次

    归并排序的概念

    /**
     * 归并排序(Merge Sort): 冯诺依曼 1945年提出
     * 1、不断的将当前序列平均分割成2个子序列,直到不能分割为止  //divide
     * 2、不断的将2个子序列合并成一个有序序列,直到最终剩下1个有序序列  //merge
     */
    
    归并排序图解.gif 归并排序.png
    /// Swift 代码实现如下:
    class MergeSort: NSObject {
        
        func mergeSort(_ array: [Int]) -> [Int] {
            guard array.count > 1 else {
                return array
            } // 1
            
            let middleIndex = array.count / 2              // 2
            
            let leftArray = mergeSort(Array(array[0..<middleIndex]))             // 3
            
            let rightArray = mergeSort(Array(array[middleIndex..<array.count]))  // 4
            
            return merge(leftPile: leftArray, rightPile: rightArray)             // 5
        }
        
        
        func merge(leftPile: [Int], rightPile: [Int]) -> [Int] {
            // 1
            var leftIndex = 0
            var rightIndex = 0
            
            // 2
            var orderedPile = [Int]()
            
            // 3
            while leftIndex < leftPile.count && rightIndex < rightPile.count {
                if leftPile[leftIndex] < rightPile[rightIndex] {
                    orderedPile.append(leftPile[leftIndex])
                    leftIndex += 1
                } else if leftPile[leftIndex] > rightPile[rightIndex] {
                    orderedPile.append(rightPile[rightIndex])
                    rightIndex += 1
                } else {
                    orderedPile.append(leftPile[leftIndex])
                    leftIndex += 1
                    orderedPile.append(rightPile[rightIndex])
                    rightIndex += 1
                }
            }
            
            // 4
            while leftIndex < leftPile.count {
                orderedPile.append(leftPile[leftIndex])
                leftIndex += 1
            }
            
            while rightIndex < rightPile.count {
                orderedPile.append(rightPile[rightIndex])
                rightIndex += 1
            }
            
            return orderedPile
        }
    
    }
    
    
    
    

    相关文章

      网友评论

          本文标题:算法学习——归并排序

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