[绍棠_Swift] Swift排序方法汇总

来源:互联网 发布:weui 开发案例 源码 编辑:程序博客网 时间:2024/06/05 00:52

创建一个Sort.swift文件

import UIKit

class Sort: NSObject {

    

    /// 快速排序

    ///

    /// - Parameters:

    ///   - mArray: 要排序的数组

    ///   - leftIndex: 第一个元素索引

    ///   - rightIndex: 最后一个元素索引

    public func quickSort(mArray:inout Array<Int>, leftIndex: Int, rightIndex:  Int) {

        if leftIndex < rightIndex {

            var left = leftIndex

            var right = rightIndex

            let temp = getMiddleIndex(mArray: &mArray, leftIndex: &left, rightIndex: &right)

            quickSort(mArray: &mArray, leftIndex: leftIndex, rightIndex: temp - 1)

            quickSort(mArray: &mArray, leftIndex: temp + 1, rightIndex: rightIndex)

        }

    }

    

    private func getMiddleIndex(mArray:inout Array<Int>, leftIndex:inout Int, rightIndex:inout Int) -> (Int) {

        let tempValue = mArray[leftIndex]

        while leftIndex < rightIndex {

            

            while leftIndex < rightIndex && tempValue <= mArray[rightIndex] {

                rightIndex -= 1

            }

            if leftIndex < rightIndex {

                mArray[leftIndex] = mArray[rightIndex]

            }

            while leftIndex < rightIndex && mArray[leftIndex] <= tempValue {

                leftIndex += 1

            }

            if leftIndex < rightIndex {

                mArray[rightIndex] = mArray[leftIndex]

            }

        }

        mArray[leftIndex] = tempValue

        return leftIndex

    }

    

    /// 冒泡排序

    ///

    /// - Parameter mArray: 要排序的数组

    public func bubbleSort(mArray:inout Array<Int>) {

        for i in 0..<(mArray.count - 1) {

            for j in 0..<(mArray.count - i - 1) {

                if mArray[j] > mArray[j + 1] {

                    //交换元素位置

                    (mArray[j],mArray[j + 1]) = (mArray[j + 1],mArray[j])

                }

            }

        }

    }

    

    /// 选择排序

    ///

    /// - Parameter mArray: 要排序的数组

    public func selectSort(mArray:inout Array<Int>) {

        for i in 0..<mArray.count {

            var minIndex = i

            for j in (i + 1)..<mArray.count {

                if mArray[minIndex] > mArray[j] {

                    minIndex = j

                }

            }

            if minIndex != i {

                (mArray[i],mArray[minIndex]) = (mArray[minIndex],mArray[i])

            }

        }

    }

    

    /// 直接插入排序

    ///

    /// - Parameter mArray: 要排序的数组

    public func insertSort(mArray:inout Array<Int>) {

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

            if mArray[i + 1] < mArray[i] {

                let temp = mArray[i + 1]

                for j in (1...(i + 1)).reversed() {

                    if mArray[j - 1] > temp {

                        (mArray[j - 1],mArray[j]) = (mArray[j],mArray[j - 1])

                    }

                }

            }

        }

    }

    

    /// 希尔排序

    ///

    /// - Parameter mArray: 要排序的数组

    public func shellSort(mArray:inout Array<Int>) {

        var gap = mArray.count / 2

        while gap >= 1 {

            for i in gap..<mArray.count {

                let temp = mArray[i]

                var j = i

                while j >= gap && temp < mArray[j - gap] {

                    mArray[j] = mArray[j - gap]

                    j -=  gap

                }

                mArray[j] = temp

            }

            gap = gap / 2

        }

    }

}


// 使用示例

override func viewDidLoad() {

        super.viewDidLoad()

        

        var mArray:Array = [6,5,8,1,9,8,5,6,9,5,2]

        let sort = Sort()

        print("排序前\(mArray)")

        

        //快速排序

        sort.quickSort(mArray: &mArray,leftIndex: 0,rightIndex: mArray.count - 1)

        

        //冒泡排序

//        sort.bubbleSort(mArray: &mArray)

        

        //选择排序

//        sort.selectSort(mArray: &mArray)

        

        //简单插入排序

//        sort.insertSort(mArray: &mArray)

        

        //希尔排序

//        sort.shellSort(mArray: &mArray)

        print("排序后\(mArray)")

    }




原创粉丝点击