//: Playground - noun: a place where people can play

import UIKit

var str = "Hello, playground"

/// sum

func sum(array: Array<Int>) -> Int {
if array.count == 0 {
return 0;
} var arrayM = array
let first = arrayM.removeFirst() return first + sum(array: arrayM)
} let total = sum(array: [2, 4, 6, 8]) /// count func findTotalCount(array: Array<Int>) -> Int {
if array.count == 1 {
return 1;
} var count: Int = 0 var arrayM = array
arrayM.removeFirst()
count += 1 return count + findTotalCount(array: arrayM)
} let totalCount = findTotalCount(array: [2, 4, 6, 8]) /// maximum func findMaximum(array: Array<Int>, max: Int) -> Int {
if array.count == 0 {
return max;
} var arrayM = array
var m = max let first = arrayM.removeFirst()
m = first > max ? first : max return findMaximum(array: arrayM, max: m)
} let max = findMaximum(array: [2, 4, 6, 8, 3], max: 0) /// quick sort func quickSort(array: Array<Int>) -> Array<Int> {
if array.count < 2 {
return array
} let pivot = array[0] var leftArray = Array<Int>()
var rightArray = Array<Int>() for i in 1...array.count - 1 {
let item = array[i]
if item <= pivot {
leftArray.append(item)
} else {
rightArray.append(item)
}
} var result = Array<Int>()
result.append(contentsOf: quickSort(array: leftArray))
result.append(pivot)
result.append(contentsOf: quickSort(array: rightArray))
return result
} let qs = quickSort(array: [5, 2, 7, 10, 30, 200, 156]) /// quick sort in best-case func quickSortInBestCase(array: Array<Int>) -> Array<Int> {
if array.count < 2 {
return array
} let middleIndex = array.count / 2
let pivot = array[middleIndex] var leftArray = Array<Int>()
var rightArray = Array<Int>() for i in 0...array.count - 1 {
let item = array[i]
if item < pivot {
leftArray.append(item)
} else if item > pivot {
rightArray.append(item)
}
} var result = Array<Int>()
result.append(contentsOf: quickSort(array: leftArray))
result.append(pivot)
result.append(contentsOf: quickSort(array: rightArray))
return result
} let qsInBestCase = quickSortInBestCase(array: [5, 2, 7, 10, 30, 200, 156])

递归演示程序(swift)的更多相关文章

  1. 用C语言实现汉诺塔自动递归演示程序

    用C语言实现汉诺塔自动递归演示程序 程序实现效果 1.变界面大小依照输入递归数改变. 2.汉诺塔自动移动演示. 3.采用gotoxy实现流畅刷新. 4.保留文字显示递归流程 程序展示及实现 githu ...

  2. Swift 3到5.1新特性整理

    本文转载自:https://hicc.me/whats-new-in-swift-3-to-5-1/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有. Hipo 2.0 重写从 Swif ...

  3. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  4. Swift: 在Swift中桥接OC文件(自己创建的类文件、第三方库文件)

    一.介绍 随着Swift的逐渐成熟,使用swift开发或者混合开发已经成为了一个趋势,本身苹果公司也十分推荐使用Swift这门新语言.目前Swift已经更新到了3.0,估计没有多久4.0就要出来了.那 ...

  5. swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念

    ***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...

  6. IOS系列swift语言之课时四

    今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...

  7. swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)

    函数 func x(a:Int, b:Int)  {}   func x(a:Int, b:Int) -> Void {}  func x(a:Int, b:Int) ->(Int,Int ...

  8. Swift实战之2048小游戏

    上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完 ...

  9. Swift的排序算法总结

    下面让我们一起来见识一下swift中基于Array的扩展的冒泡排序,选择排序和快速排序吧. 1.冒泡排序 冒泡排序再基础不过了,这里就不再讲其原理了,实在不会可以看下百度百科冒泡排序 既然冒泡排序避免 ...

随机推荐

  1. ERP中自定义报表制作流程

    查询制作流程 新增单表查询--查询语句设置--表格设置(列信息)--参数设置--关联设置--着色设置 报表设计需求(以差旅报销单为例) 1.制作按部门统计每个月的 报销金额并且可以关联到明细进行比对 ...

  2. Python进阶内容(六)--- 函数式编程

    斐波那契数列(Fibonacci)的递归与非递归实现 费波那契数列由0和1开始,之后的数就由之前的两数相加 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

  3. PE解析器的编写(一)——总体说明

    之前自己学习了PE文件的格式,后来自己写了个PE文件的解析器,这段时间工作上刚好要用到它,老板需要能查看某个exe中加载的dll的一个工具,我在使用之前自己写的这个东西的时候,发现很多东西都忘记了,所 ...

  4. [转载]linux修改open files数

    概要:linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够.这就需要修改ulimit和file-m ...

  5. SQL Server之LEFT JOIN、RIGHT LOIN、INNER JOIN的区别

    很多人刚入门的时候分不清LEFT JOIN.RIGHT LOIN 和 INNER JOIN的区别,对它们的定义比较模糊,今天就简单的介绍一下它们的区别,对于入门的人来说,应该能够帮助你们理解. lef ...

  6. IDEA新建spring boot项目没有Spring Initializr选项

    在settings -> Plugins 里面搜索spring boot,勾选上,然后再重启下idea,就可以了.如果Plugins里面没有spring boot的话,先安装下,再勾选. 参考( ...

  7. input表单的type属性详解,不同type不同属性之间区别

    目标:详解表单input标签type属性常用的属性值 一.input标签和它的type属性 PS:input 元素可以用来生成一个供用户输入数据的简单文本框. 在默认的情况下, 什么样的数据均可以输入 ...

  8. Java生成微信二维码及logo二维码

    依赖jar包 二维码的实现有多种方法,比如 Google 的 zxing 和日本公司的 QrCode,本文以 QrCode 为例. QrCode.jar:https://pan.baidu.com/s ...

  9. linux几条常用的命令

    列出一些手头分分钟要用到的命令. 1.df -h 用来查看各个分区的大小 2.du -h --max-depth=0 /data2/xijun.gong/tt_data 用来查看文件夹的大小,并指定递 ...

  10. MIME---multipart类型

    1.3  multipart类型 MIME邮件中各种不同类型的内容是分段存储的,各个段的排列方式.位置信息都通过Content-Type域的multipart类型来定义.multipart类型主要有三 ...