iOS进阶Swiftswift学习

常用排序算法学习(swift版)

2016-11-16  本文已影响12067人  槛内浊物

前言

之前写过一篇Swift排序之sort函数,里面仅仅写了sort函数怎么使用。今天用一些常用的算法,试着实现一下swift中的sort函数,顺便也学习一下常用的排序算法。
最近在网上也看了一些swift的排序算法,但是感觉写的都不太好,都是类似于这种

func sort(a:[Int]) {
    .......
}

这种其实也不是不行,但是有点不太符合swift的风格,我们看swift中的sort是没有把数组传过去的,他只是Array的一个扩展。应该是这么用的

let a = ["2","1","3"]
a.sort(<)

下面我们抛开正序还是倒叙,默认为正序排,来探讨下swift中基于Array的扩展的冒泡排序,选择排序和快速排序

1. 冒泡排序

冒泡排序再基础不过了,这里就不再讲其原理了,实在不会可以看下百度百科冒泡排序
既然冒泡排序避免不了数组中两个数据交换,先写一个交换函数

// 交换数组中i和j两个位置的数据
extension Array {

    fileprivate mutating func swap(i:Int,j:Int) {

        (self[i],self[j]) = (self[j],self[i])
    
    }
}

下面就是排序了也很简单就不多解释了

 // MARK: - 冒泡排序
/**
 * 通过与相邻元素的比较和交换,把小的数交换到最前面。
 */
extension Array where Element:Comparable {

    mutating func bubbleSort() {

        for i in 0..<self.count-1 {

            for j in (i+1...self.count-1).reversed() {
                // 后者小于前者,交换位置,即小的往上升大的往下沉
                if self[j] < self[j-1] {
                    swap(i: j, j: j-1)
                }

            }

        }  

    }

}

因为是排序,所以元素必须满足协议是可比较的。
下面快速排序和选择排序也是同样的道理。

2. 快速排序

快速排序的思想

源代码这里先截下图,想看的话可以去我github上下载源代码

快速排序 接上图

选择排序这里就不说了,大家可以自己尝试写一下,有兴趣可以去我github下载源代码

上一篇 下一篇

猜你喜欢

热点阅读