进入到简单排序的第三个排序,插入排序。其实插入排序,和冒泡,还有选择排序都是比较排序算法的一种,比较效率基本也是O(N²) 但是插入排序,效率基本比冒泡快一倍,选择快一点。 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据的数组,*这里我们可以认为刚开始这个有序数组其实是为空,那么我们排序就是全排序了* 插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

可能不太好理解,我们来看几个图

这只是排序的中间状态,我们可以假定刚开始数组有序的部分为空


代码如下

//: MARK - 3 插入排序
func insertionSort<T:Comparable>(aArr:[T]) -> [T] {
复制代码

var arr = aArr     for outerIndex in 1..<arr.count { //  在插入排序中OuterIndex左侧是有序的 , 右侧无需,依次判断 并且向右移动给给被标记变量留出位置        let temp = arr[outerIndex] // 标记每次需要被插入的数据         var innerIndex = outerIndex                  while innerIndex > 0 && arr[innerIndex - 1 ] >= temp  { // innerIndex , 遍历到最左端也就是0结束,或者是遍历到小于被标记值             arr[innerIndex] = arr[innerIndex - 1 ]             innerIndex -= 1 ; // copy 操作          }         arr[innerIndex] = temp // 插入被标记值              }               return arr

}print(insertionSort([9,8,7,6,5,4,3,2,1,0]))// 选法的比较效率 O(N²/4) 比冒泡快一倍,比选择快一点//对于 基本有序的序列,由于while循环总是为假,算法的效率基本达到O(N²) 对于逆序由于复制太多并没有冒泡快
复制代码

iOS程序员也要学点算法吧 简单排序之插入排序相关推荐

  1. 程序员为什么要学算法?

    "程序员必须会算法 ?" 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点. 很多人觉得像人工智能.数据搜索与挖掘这样高薪的工作才用得上算 ...

  2. 程序员必须唱我哪些算法?

    为了让你对数据结构和算法能有个全面的认识,我画了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点. 这里面有10个数据结构:数组.链表.栈.队列.散列表.二叉树.堆.跳表.图.Trie ...

  3. 程序员、大数据、算法黑科技

    黑科技,数学建模,程序员,大数据,算法,大伙按需自取. 环球最黑科技 ID:huanqiuhei 只有你想不到,没有做不到 每天一条环球黑科技资讯,各种外网传送门 你不仅能看到,关键还能买到! 来不及 ...

  4. 一个6年iOS程序员的工作感悟,送给还在迷茫的你

    前言 每一个开发者,都有一段不愿提起的经历,很多年前,刚刚从大学毕业的时候,很多公司来校招.其中最烂俗的一个面试问题是:"你希望你之后三到五年的发展是什么?".我当时的标准回答是( ...

  5. 数据结构 python的书推荐-为什么程序员一定要学数据结构?数据结构书单推荐~...

    原标题:为什么程序员一定要学数据结构?数据结构书单推荐~ 来自:程序员书库(ID:OpenSourceTop) 人们最初使用计算机是用来处理简单的数值计算问题,当你使用计算机来处理一个问题时,一般经过 ...

  6. 《程序员面试金典》+《算法导论》

    <程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...

  7. 为有机会进大厂,程序员必须掌握的核心算法有哪些?

    由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题, ...

  8. 36岁转行学java_年纪大了还想转行当程序员,现在学java还来得及吗

    现在流行这样一种论调:说程序员就是吃青春饭的,年纪大了就不要再转行当java程序员了.可是仍然还有许多人前赴后继的想来学java当程序员,但是心里面有隐约担心:年纪也不小的,快30了还能学java吗? ...

  9. 学了go语言再学java容易吗_年纪大了还想转行当程序员,现在学java还来得及吗-Go语言中文社区...

    现在流行这样一种论调:说程序员就是吃青春饭的,年纪大了就不要再转行当java程序员了.可是仍然还有许多人前赴后继的想来学java当程序员,但是心里面有隐约担心:年纪也不小的,快30了还能学java吗? ...

最新文章

  1. 概率论与数理统计--第三章
  2. python链表的创建_Python——新建链表
  3. 视图、触发器、事务、存储过程、函数
  4. 适用于WinForm的一个定时器类
  5. 变电站计算机监控系统的作用和工作原理,变电站计算机监控系统的主要功能.pdf...
  6. 每天进步一点点:andriod学习从零开始
  7. 可能是全网最全的 Java 日志框架适配、冲突解决方案
  8. python在什么平台开发_python主要用于开发什么
  9. keepass+onedrive打造密码管理器
  10. java list foreach 修改_Java ArrayList在foreach中remove的问题分析
  11. android.support.v4.app.FragmentManager无法转换为android.app.FragmentManager
  12. Goland的常用快捷键
  13. 给大家推荐一套 git 工作流
  14. [SpringBoot]下载excel模板,postman测试接口
  15. 服务器与Tomcat区别
  16. 计算机软件专业硕士论文,软件工程硕士论文范文
  17. 常见蛋白质种类_蛋白粉有哪些种类?都有什么作用?常见的6种蛋白粉
  18. html三角形正方形代码,用CSS画三角形,纯CSS绘制三角形的代码
  19. bus error的解决方法
  20. SEO: 使用 rel=canonical 为类似网页或重复网页指定权威网页

热门文章

  1. Failed to install .apk on device 'emulator-5554': timeout解决方法
  2. Windows常用命令行命令
  3. Android 简单实现订单模块类APP的物流详情页
  4. Android中Application类用法
  5. redis 相关操作
  6. TCP协议可靠性保证(确认应答机制,超时重传机制,流量控制,拥塞窗口)
  7. AS安装APK失败的两种情况
  8. WPF中的一些常用类型转换
  9. 【深度好文】多线程之WaitHandle--派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent...
  10. 使用HttpHandler解析并展示PDF文档内容