[绍棠_Swift] Swift排序方法汇总
2017-10-13 11:28
441 查看
创建一个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)")
}
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)")
}
相关文章推荐
- 数据结构中排序方法汇总
- Swift3 文件操作常用方法汇总
- [算法] 排序方法复杂度、稳定性汇总
- JS排序方法(sort,bubble,select,insert)代码汇总
- 排序方法汇总
- list<T>.Sort()排序方法汇总
- [绍棠_swift] swift 中#pragma mark 表示方法
- Swift - 数组排序方法(附样例)
- 排序方法汇总(一)堆排序
- 排序方法汇总(二)快速排序
- 各种排序方法汇总
- 排序方法汇总(三)归并排序
- [绍棠_Swift] Swift - 动画效果的实现方法总结(附样例)
- 排序方法汇总
- 排序方法汇总-JAVA实现
- 排序方法汇总
- 数据结构中十种经典排序方法汇总(C++)
- C++排序方法汇总
- JS排序方法(sort,bubble,select,insert)代码汇总
- [绍棠_Swift] Swift3.0中代理的使用方法