iOS程序员也要学点算法吧-简单排序之选择排序

作者: 南栀倾寒 | 来源:发表于2016-03-31 16:55 被阅读357次

接之前的文章 iOS程序员也要学点算法吧-简单排序之冒泡排序 , 我们发现冒泡排序的比较效率和交换效率都是O(N²) ,这一半不是我们想要的,这里引入了选择排序,选择排序讲算法的交换效率减少到了O(N),对于部分编程语言来说,往往交换耗时更大,所以在学习过程中未尝不是一个解决的办法。
选择排序的思想还是,利用双层循环,只不过每次循环中,我们用一个MinIndex变量 记录最小值的下标,在每次内存循环结束后,才发生交换,大大的减少了交换次数, 先来个演示吧

1.gif

在大数据量的时候交换次数显得尤为明显

1.gif

代码如图

Paste_Image.png
//:MARK - 2 选择排序

 func selectSort<T:Comparable>( aArr:[T]) -> [T] {
    var arr = aArr
    var minIndex = 0 // 记录每次遍历的最小值
    for outerIndex in 0..<arr.count {
        minIndex = outerIndex
        for innerIndex in (outerIndex + 1)..<arr.count {
            if arr[minIndex] > arr[innerIndex] {
                    minIndex = innerIndex // 判断最小值,充值选择的标记
             }
     //            在每次外层遍历之后再交换

if minIndex != outerIndex {
let t = arr[outerIndex]
arr[outerIndex] = arr[minIndex]
arr[minIndex] = t
}
}
}

          return arr
  }

    print(selectSort([9,8,7,6,5,4,3,2,1,0]))

相关文章

网友评论

    本文标题:iOS程序员也要学点算法吧-简单排序之选择排序

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