Algoritmo - Algoritmo de classificação de mesclagem

A ideia geral da classificação por mesclagem é a ideia de dividir e conquistar. Divida o array ao meio, passo a passo, até que reste apenas um elemento (deve estar em ordem neste momento) e, em seguida, mescle os arrays ordenados um por um para obter o array classificado.array, por isso é chamado de classificação por mesclagem.

rápido:

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]
    }
}

Complexidade de tempo: O(n log(n))
é um algoritmo de classificação relativamente simples e rápido, caracterizado por alta estabilidade.

Acho que você gosta

Origin blog.csdn.net/weixin_44758107/article/details/127688726
Recomendado
Clasificación