python里实现插入排序算法

原创 2017年10月01日 13:23:57
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5


代码如下:
#python 3. 6  
#蔡军生   
#http://blog.csdn.net/caimouse/article/details/51749579  
#插入排序算法
#

def insertion_sort(array):
    for j in range(1, len(array)):
        key = array[j]
        #从已经排好序array[0,...,j-1]里找到合适的位置插入array[j]
        i = j - 1
        while i >= 0 and array[i] > key:
            array[i+1] = array[i]
            i -= 1
        array[i+1] = key

#测试一下
test = [5,2,4, 6, 1, 3]
insertion_sort(test)
print(test)

输出结果如下:

[1, 2, 3, 4, 5, 6]

深入浅出Numpy
http://edu.csdn.net/course/detail/6149 

Python游戏开发入门

http://edu.csdn.net/course/detail/5690

你也能动手修改C编译器

http://edu.csdn.net/course/detail/5582

纸牌游戏开发

http://edu.csdn.net/course/detail/5538 

五子棋游戏开发

http://edu.csdn.net/course/detail/5487
RPG游戏从入门到精通
http://edu.csdn.net/course/detail/5246
WiX安装工具的使用
http://edu.csdn.net/course/detail/5207
俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
boost库入门基础
http://edu.csdn.net/course/detail/5029
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
C++标准模板库从入门到精通 
http://edu.csdn.net/course/detail/3324
跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
在Windows下SVN的版本管理与实战 
http://edu.csdn.net/course/detail/2579
Visual Studio 2015开发C++程序的基本使用 
http://edu.csdn.net/course/detail/2570
在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
在VC2015里学会使用MySQL数据库
http://edu.csdn.net/course/detail/2672


版权声明:本文为博主原创文章,未经博主允许不得转载。

插入排序算法之C++实现

插入排序,顾名思义其实现形式是插入. 在整个大小不一的队列中, 第一次: 从一个元素开始,将后面相邻的元素(第二个元素)提取出来,放在一个变量中暂时保存,然后和第二个元素前面的那个元素(第一个元素)做...
  • stzy00
  • stzy00
  • 2015年03月12日 23:31
  • 1507

插入排序算法详解及实现

插入排序相对冒泡排序而言是一种较为快捷方便的排序算法。 冒泡排序:http://blog.csdn.net/llzk_/article/details/51547923 插入排序原...
  • LLZK_
  • LLZK_
  • 2016年06月10日 20:30
  • 9241

java实现折半插入排序算法

前言折半插入排序算法是一种排序的算法,它通过“折半查找”在比较区查找插入点的位置,这样可以减少比较的次数,移动的次数不变,时间复杂度仍为 O(n^2);算法描述...
  • sgls652709
  • sgls652709
  • 2015年09月04日 06:03
  • 1109

【算法】插入排序的递归实现

int data[10] = {5,4,3,6,7,8,56,3,234,2}; //输入元素为: data需要排序的数组 start需要排序的数组的起始下标 end需要排序的,无序序列的首元素的下标...
  • chenglibin1988
  • chenglibin1988
  • 2013年05月19日 15:07
  • 4071

“深入理解”—插入排序算法

总结下自己对插入排序的理解。 插入排序算法思想:每趟将一个元素,按照其关键字的大小插入到它前面已经排序的子序列中,依此重复,直到插入全部元素。 插入排序包括:直接插入排序、二分插入排序以及希尔排序...
  • qq_25827845
  • qq_25827845
  • 2016年06月21日 17:57
  • 2637

c语言实现直接插入排序(正序和逆序)

#include struct DataType { int data; }; struct Sqlist { DataType R[20]; int length; }; //直接插入排...
  • jiujiu28
  • jiujiu28
  • 2015年09月07日 09:03
  • 1138

排序算法系列:插入排序算法

直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。...
  • u013761665
  • u013761665
  • 2016年03月24日 08:53
  • 6553

插入排序的递归算法(升序)

近来看算法导论有一习题是关于插入排序的,要求用递归实现。正好理解一下递归,在此分享下我的理解,如有纰漏,请多多指教。   已知一无序数组A[1......N],利用插入排序的方法可以将这个数组分...
  • Far__cloud
  • Far__cloud
  • 2016年04月14日 18:24
  • 732

排序算法之折半插入排序的思想以及Java实现

1 基本思想 折半插入排序(binary insertion sort)的基本原理与直接插入排序相同,不同之处在于,确定当前记录在前面有序子数组中的位置时,直接插入排序是采用顺序查找的方...
  • whq19890827
  • whq19890827
  • 2016年08月12日 22:36
  • 636

Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)

为加深对各种基础排序算法的理解,我基于Thomas H. Cormen等《算法导论》中的伪代码,用Python实现了冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法。 具体算法如下...
  • vernice
  • vernice
  • 2016年02月17日 10:11
  • 2065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里实现插入排序算法
举报原因:
原因补充:

(最多只允许输入30个字)