欢迎来到代码驿站!

当前位置:首页 >

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

时间:2021-05-06 09:40:17|栏目:|点击:

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

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
}



上一篇:javascript将字符串中的多个空格替换为一个空格的正则实例

栏    目:

下一篇:docker 容器上编译 go 程序提示找不到文件问题

本文标题:简单理解插入排序算法及Swift版的代码示例

本文地址:http://www.codeinn.net/misctech/115727.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有