Algorithm - Merge Sort Algorithm

The general idea of ​​merge sort is the divide and conquer idea. Divide the array in half step by step until there is only one element left (it must be in order at this time), and then merge the ordered arrays one by one to get the sorted array. array, so it is called merge sort.

swift:

import Foundation

var arr = [10,9,8,7,6,4,5,3,2,1]
mergeSort(array: &arr, left: 0, right: arr.count - 1)
print(arr)

func mergeSort(array: inout [Int], left: Int, right: Int) {
    
    
    if left >= right {
    
     return }	//这里一定是大于等于,没有等于号会陷入死循环
    let mid = (left + right) / 2
    mergeSort(array: &array, left: left, right: mid)
    mergeSort(array: &array, left: mid + 1, right: right)
    var temp = Array<Int>.init(repeating: 0, count: right - left + 1)
    var i = left
    var j = mid + 1
    var tempIndex = 0
    //两个子数组,找出最小的数依次合并
    while i <= mid, j <= right {
    
    
        if array[i] < array[j] {
    
    
            temp[tempIndex] = array[i]
            i += 1
            tempIndex += 1
        }else{
    
    
            temp[tempIndex] = array[j]
            j += 1
            tempIndex += 1
        }
    }
    //两个子数组数量不一定相等,把剩下的数字直接合并过来
    //下面两个while实际只会有一个执行
    while i <= mid {
    
    
        temp[tempIndex] = array[i]
        i += 1
        tempIndex += 1
    }
    while j <= right {
    
    
        temp[tempIndex] = array[j]
        j += 1
        tempIndex += 1
    }
    //将临时数组转化到arr中
    for i in 0..<(right - left + 1) {
    
    
        array[left + i] = temp[i]
    }
}

Time complexity: O(n log(n))
is a relatively simple and fast sorting algorithm, characterized by high stability.

Guess you like

Origin blog.csdn.net/weixin_44758107/article/details/127688726