算法学习(1):排序算法-插入排序及python实现

来源:互联网 发布:photoshop破解补丁mac 编辑:程序博客网 时间:2024/05/21 22:56

前言

插入排序应该是最容易想到的排序算法,其核心思想是:将待排序的序列看成两部分,以某一个元素为界,左边的是排好序的序列,右边是待排序的序列,每次读取边界上的一个元素,然后将它跟排序好的序列中的元素一个一个对比,然后排好序的元素依次挪出个空位,然后将这个元素插入到合适的位置,一直循环到序列结束。

插入排序很常见,比如:玩扑克牌时,抓牌的过程就是一个插入排序,每抓到一张牌,就将这张牌插入到手里排好序的牌中。怎么个插入法儿呢?比如你手里的牌是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] = tmpprint(a)

总结

插入排序的时间复杂度是:O(n^2)
插入排序的空间复杂度是:O(n)

插入排序的好坏极大地依赖于序列原始状态,如果起始无序,则效率很低。不适合大规模数据集的排序问题。

0 0
原创粉丝点击