1. //: Playground - noun: a place where people can play
  2. import UIKit
  3. var str = "Hello, playground"
  4. /// sum
  5. func sum(array: Array<Int>) -> Int {
  6. if array.count == 0 {
  7. return 0;
  8. }
  9. var arrayM = array
  10. let first = arrayM.removeFirst()
  11. return first + sum(array: arrayM)
  12. }
  13. let total = sum(array: [2, 4, 6, 8])
  14. /// count
  15. func findTotalCount(array: Array<Int>) -> Int {
  16. if array.count == 1 {
  17. return 1;
  18. }
  19. var count: Int = 0
  20. var arrayM = array
  21. arrayM.removeFirst()
  22. count += 1
  23. return count + findTotalCount(array: arrayM)
  24. }
  25. let totalCount = findTotalCount(array: [2, 4, 6, 8])
  26. /// maximum
  27. func findMaximum(array: Array<Int>, max: Int) -> Int {
  28. if array.count == 0 {
  29. return max;
  30. }
  31. var arrayM = array
  32. var m = max
  33. let first = arrayM.removeFirst()
  34. m = first > max ? first : max
  35. return findMaximum(array: arrayM, max: m)
  36. }
  37. let max = findMaximum(array: [2, 4, 6, 8, 3], max: 0)
  38. /// quick sort
  39. func quickSort(array: Array<Int>) -> Array<Int> {
  40. if array.count < 2 {
  41. return array
  42. }
  43. let pivot = array[0]
  44. var leftArray = Array<Int>()
  45. var rightArray = Array<Int>()
  46. for i in 1...array.count - 1 {
  47. let item = array[i]
  48. if item <= pivot {
  49. leftArray.append(item)
  50. } else {
  51. rightArray.append(item)
  52. }
  53. }
  54. var result = Array<Int>()
  55. result.append(contentsOf: quickSort(array: leftArray))
  56. result.append(pivot)
  57. result.append(contentsOf: quickSort(array: rightArray))
  58. return result
  59. }
  60. let qs = quickSort(array: [5, 2, 7, 10, 30, 200, 156])
  61. /// quick sort in best-case
  62. func quickSortInBestCase(array: Array<Int>) -> Array<Int> {
  63. if array.count < 2 {
  64. return array
  65. }
  66. let middleIndex = array.count / 2
  67. let pivot = array[middleIndex]
  68. var leftArray = Array<Int>()
  69. var rightArray = Array<Int>()
  70. for i in 0...array.count - 1 {
  71. let item = array[i]
  72. if item < pivot {
  73. leftArray.append(item)
  74. } else if item > pivot {
  75. rightArray.append(item)
  76. }
  77. }
  78. var result = Array<Int>()
  79. result.append(contentsOf: quickSort(array: leftArray))
  80. result.append(pivot)
  81. result.append(contentsOf: quickSort(array: rightArray))
  82. return result
  83. }
  84. 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. Java 非线程安全的HashMap如何在多线程中使用

    Java 非线程安全的HashMap如何在多线程中使用 HashMap 是非线程安全的.在多线程条件下,容易导致死循环,具体表现为CPU使用率100%.因此多线程环境下保证 HashMap 的线程安全 ...

  2. XCode8中的sizeClass设置

    xcode8出来很久了,xcode9都要出来了,项目中由于一直没遇到用到适配屏幕的情况,所以一直也就忽略了这个知识点.今天忽然想起来,就抱着试一试的态度打开了xcode,我去~就我现在了解而言,屏幕大 ...

  3. Chris Richardson微服务翻译:构建微服务之使用API网关

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

  4. python函数高级特性

    掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...

  5. H5 调用本地相机并压缩上传(是从angular的ionic项目中截取的)

    html部分 <div class="list_upload item bg_white"> <div class="itemImg pic_uploa ...

  6. JAVA基础-IO流(一)

    一.IO流 IO流是Java为方便我们对文件的读写进行操作而提供的一种技术.按照读取写入文件的方式不同可以分为字符流和字节流,而每个流派按照功能又分为读和写.字符流读写操作的根类为Reader和Wri ...

  7. 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性

    "/"应用程序中的服务器错误.使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. ...

  8. deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch正则化和程序框架 听课笔记

    这一周的主体是调参. 1. 超参数:No. 1最重要,No. 2其次,No. 3其次次. No. 1学习率α:最重要的参数.在log取值空间随机采样.例如取值范围是[0.001, 1],r = -4* ...

  9. RequireJS对文件合并与压缩实现方法

    RequireJS 是一个JavaScript模块加载器.它非常适合在浏览器中使用, 它非常适合在浏览器中使用,但它也可以用在其他脚本环境, 就像 Rhino and Node. 使用RequireJ ...

  10. hdu_1251统计难题(字典树Trie)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...