[绍棠_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)")
}
- [绍棠_Swift] Swift排序方法汇总
- [绍棠_Swift] Swift
- [绍棠_swift] swift 中#pragma mark 表示方法
- [绍棠_Swift] Swift中的回调传值
- [绍棠_swift] Swift中的结构体
- [绍棠_swift] Swift中的继承、构造器
- [绍棠_Swift] Swift中的@noescape @escaping @autoclosure
- [绍棠_swift] Swift中assert(断言)的使用
- [绍棠_Swift] Swift中扩展extension、协议protocol
- [绍棠_Swift] 怎样在Swift项目中引入CommonCrypto库
- [绍棠_Swift] Swift中类和结构体的区别
- [绍棠_Swift] Swift中使用Base64编解码
- [绍棠_Swift] Swift指纹验证解锁 touch事件
- [绍棠_swift] swift的简单学习(字符串、4元组、类型转换及运算)
- Swift - 字典排序方法
- 排序方法汇总
- 排序各种方法汇总!
- 排序方法汇总
- 设备树在platform设备驱动中的使用
- 高可用集群之简单资源配置
- 解决导入第三方框架v4包重复依赖的问题
- eclipse快捷键Ctrl+Shift+i获取调试过程中方法返回值失效
- 83、java的IO操作-读写文件
- [绍棠_Swift] Swift排序方法汇总
- QtCreator调试传入运行参数-调试文件打开操作
- AOS中Excel文件导入
- ArcEngine中的ICommand接口和ITool接口
- java开发笔记
- awk指令使用详解
- 2.9 Linux tty终端
- JavaScript正则表达式之最简得到字符串
- SQL SERVER还原数据库时"试图扩大物理文件时,MODIFY FILE 遇到操作系统错误 112(磁盘空间不足)"错误处理