简单理解插入排序算法及Swift版的代码示例

 更新时间:2016年07月06日 11:11:36   作者:yoyo  
插入排序算法可以在已排序的序列中将要插入的元素和原有元素保持有序,这里我们来简单理解插入排序算法及Swift版的代码示例,需要的朋友可以参考下

算法思想
插入排序的方式类似平时打扑克牌的时候排序自己手中的扑克牌。开始时,我们左手中没有牌,桌上有洗好的扑克牌,我们抓取一张扑克牌并放入左手的正确位置。为了找到一张扑克牌的正确位置,我们从右到左将它与手中的每张牌进行比较,左手上的牌总是排序好的,而这些牌原来都是桌上牌堆中顶部的牌,当我们抓完牌时,左手中的牌自然是有顺序的。
之所以叫插入排序,不是为别的,正是因为该算法的核心就是将无序的元素插入排好序的部分。
插入排序的核心思想即在于划分已排序和未排序,将每个待排序的元素逐个与已排序的元素比较,找出恰当的插入位置,插入元素,循环操作至结束
这里是一张插入排序的使用流程,在写代码前先感受一下。

201676110656609.jpg (735×185)

我们以一维数组作为待排序的数据源,整个数组的以第一个待排序的元素为分水岭,前半部分为已排好序的,后半部分是等待排序的; 开始排序时,从第二个元素开始循环开始,由于需要记录当前待排序的元素,我们引入一个变量记录分水岭的下标,也就是下面源码内的变量i; 比较的过程比较直接,从分水岭往前,逐一比较值的大小,没找到需要插入的位置时向后移动元素,知道找到位置插入元素;

201676110724690.png (507×157)

实现代码
1.由小到大排序:

func insertionSortBigger(var array: Array<Int>) -> Array<Int>{
  for(var j = 1 ; j<array.count ; j++){//从第二个开始向前对比插入
    let key = array[j] //记录要比较的值
    var i = j-1
    while(i>=0 && array[i]>key){//如果key较小,那么现有的位置向后移,为key空出位置
      array[i+1] = array[i] //移位
      i--
    }
    array[i+1] = key
  }
  return array
}

2.由大到小排序:

func insertionSortSmaller(var array: Array<Int>) -> Array<Int>{
  for(var j = 1 ; j<array.count ; j++){//从第二个开始向前对比插入
    let key = array[j] //记录要比较的值
    var i = j-1
    while(i>=0 && array[i]<key){//如果key较大,那么现有的位置向后移,为key空出位置
      array[i+1] = array[i] //移位
      i--
    }
    array[i+1] = key
  }
  return array
}



相关文章

  • 判断 ScrollView List 是否正在滚动详解

    判断 ScrollView List 是否正在滚动详解

    这篇文章主要为大家介绍了判断 ScrollView、List 是否正在滚动示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Swift在什么情况会发生内存访问冲突详解

    Swift在什么情况会发生内存访问冲突详解

    这篇文章主要给大家介绍了关于Swift在什么情况会发生内存访问冲突的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Swift编程之枚举类型详解

    Swift编程之枚举类型详解

    这篇文章主要介绍了Swift编程之枚举类型,讲解了枚举语法、匹配枚举值与switch语句、关联值、原始值等内容,Swift中枚举类型是最重要的类型,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Flutter iOS开发OC混编Swift动态库和静态库问题填坑

    Flutter iOS开发OC混编Swift动态库和静态库问题填坑

    这篇文章主要为大家介绍了Flutter iOS OC 混编 Swift动态库和静态库问题填坑详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Swift reduce函数使用示例详解

    Swift reduce函数使用示例详解

    这篇文章主要为大家介绍了Swift reduce函数使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Swift 3.0基础学习之闭包

    Swift 3.0基础学习之闭包

    Swift引进了闭包的概念,这个与object-c的block类似,使用过block的话都知道有多方便,所以开始学Swift,先要把闭包学会,后面使用会很频繁。下面这篇文章主要介绍了Swift 3.0基础学习之闭包的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Swift利用CoreData如何存储多种数据类的通讯录

    Swift利用CoreData如何存储多种数据类的通讯录

    这篇文章主要给大家介绍了关于Swift利用CoreData如何存储多种数据类的通讯录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-12-12
  • Swift教程之函数详解

    Swift教程之函数详解

    这篇文章主要介绍了Swift教程之函数详解,本文讲解了函数的声明与调用、函数的参数和返回值、函数参数名、函数类型等内容,需要的朋友可以参考下
    2015-01-01
  • Swift重构自定义空等运算符 “??=” 实例

    Swift重构自定义空等运算符 “??=” 实例

    这篇文章主要为大家介绍了Swift重构自定义空等运算符 “??=” 实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Swift中swift中的switch 语句

    Swift中swift中的switch 语句

    本文给大家介绍了swift中的swift语句,以及和c语音中的写法区别,本文介绍的非常详细,需要的朋友参考下
    2016-12-12

最新评论