算法学习(1):排序算法-插入排序及python实现
2017-03-25 20:58
591 查看
前言
插入排序应该是最容易想到的排序算法,其核心思想是:将待排序的序列看成两部分,以某一个元素为界,左边的是排好序的序列,右边是待排序的序列,每次读取边界上的一个元素,然后将它跟排序好的序列中的元素一个一个对比,然后排好序的元素依次挪出个空位,然后将这个元素插入到合适的位置,一直循环到序列结束。插入排序很常见,比如:玩扑克牌时,抓牌的过程就是一个插入排序,每抓到一张牌,就将这张牌插入到手里排好序的牌中。怎么个插入法儿呢?比如你手里的牌是3、6、9,现在你抓到了一张8,你会先跟3比较,8比3大,把3往后挪一个位儿;再跟6比,8比6大,6也往后挪一个位儿;再跟9比,8比9小,9就不挪了,然后就把8放在挪出的空位上来。循环这个过程,手里的牌就是有序的。同样的例子还有按身高站队,也是一个一个比,然后一个一个挪位子,循环这个过程。
正文
下面的代码是python语言实现的插入排序算法a=[234,2345,6,543,2346,34,6,2,56,146,776] print(a) for i in range(1,len(a)): j = i-1 tmp = a[i] while j>=0 and a[j]>tmp: a[j + 1] = a[j] j-=1 a[j+1] = tmp print(a)
总结
插入排序的时间复杂度是:O(n^2)插入排序的空间复杂度是:O(n)
插入排序的好坏极大地依赖于序列原始状态,如果起始无序,则效率很低。不适合大规模数据集的排序问题。
相关文章推荐
- 排序算法(三)冒泡、选择排序的Python实现及算法优化详解 推荐
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
- 八种排序算法 Java、Python、C++实现 -- 插入排序
- [Python-算法]python实现冒泡,插入,选择排序
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 几种常用的排序算法:插入排序、冒泡排序、选择排序的算法及C++实现
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 用python实现算法之——插入排序
- 直接排序算法python实现
- 基础算法学习(一)__几种排序:选择、插入、冒泡和快排
- 每日一算法之直接插入排序的原理及实现
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 排序算法复习(Java实现)(二): 插入,冒泡,选择,Shell,快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- python 算法 排序实现快速排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 学习算法导论-插入查询(递归实现)
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 学习算法手记【原】- 直接插入排序