简单理解插入排序算法及Swift版的代码示例
2016-07-06 11:11
555 查看
算法思想
插入排序的方式类似平时打扑克牌的时候排序自己手中的扑克牌。开始时,我们左手中没有牌,桌上有洗好的扑克牌,我们抓取一张扑克牌并放入左手的正确位置。为了找到一张扑克牌的正确位置,我们从右到左将它与手中的每张牌进行比较,左手上的牌总是排序好的,而这些牌原来都是桌上牌堆中顶部的牌,当我们抓完牌时,左手中的牌自然是有顺序的。
之所以叫插入排序,不是为别的,正是因为该算法的核心就是将无序的元素插入排好序的部分。
插入排序的核心思想即在于划分已排序和未排序,将每个待排序的元素逐个与已排序的元素比较,找出恰当的插入位置,插入元素,循环操作至结束
这里是一张插入排序的使用流程,在写代码前先感受一下。
我们以一维数组作为待排序的数据源,整个数组的以第一个待排序的元素为分水岭,前半部分为已排好序的,后半部分是等待排序的; 开始排序时,从第二个元素开始循环开始,由于需要记录当前待排序的元素,我们引入一个变量记录分水岭的下标,也就是下面源码内的变量i; 比较的过程比较直接,从分水岭往前,逐一比较值的大小,没找到需要插入的位置时向后移动元素,知道找到位置插入元素;
实现代码
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 }
您可能感兴趣的文章:
相关文章推荐
- 在命令行用 sort 进行排序
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- 文件遍历排序函数
- 关于C#中排序函数的总结
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- MYSQL必知必会读书笔记第五章之排序检索数据
- SQLSERVER的排序问题结果不是想要的
- Ruby实现插入排序算法及进阶的二路插入排序代码示例
- Windows Powershell排序和分组管道结果
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法
- jQuery拖动元素并对元素进行重新排序
- 将MySQL查询结果按值排序的简要教程
- 经典排序算法之冒泡排序(Bubble sort)代码