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

439 阅读1分钟

接之前的文章 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]))