创建一个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)")
}