選擇排序

選擇排序因其簡單性而著稱。它從陣列中的第一個元素開始,將其值儲存為最小值(或最大值,具體取決於排序順序)。然後它通過陣列進行迭代,並將 min 值替換為在路上找到的 min 之後的任何其他值。然後將該最小值放在陣列的最左邊部分,並從下一個索引重複該過程,直到陣列結束。選擇排序具有 O(n2) 的複雜度,但它被認為比它的對應物慢 - 選擇排序。

func selectionSort() -> Array<Element> {
    //check for trivial case
    guard self.count > 1 else {
        return self
    }
     
    //mutated copy
    var output: Array<Element> = self
     
    for primaryindex in 0..<output.count {
        var minimum = primaryindex
        var secondaryindex = primaryindex + 1
         
        while secondaryindex < output.count {
            //store lowest value as minimum
            if output[minimum] > output[secondaryindex] {
                minimum = secondaryindex
            }
            secondaryindex += 1
        }
         
        //swap minimum value with array iteration
        if primaryindex != minimum {
            swap(&output[primaryindex], &output[minimum])
        }
    }
     
    return output
}