Python天天美味(31) - python数据结构与算法之插入排序

简介:

1. 直接插入排序

插入排序算法思路是:
假定这个数组的序是排好的,然后从头往后,如果有数比当前外层元素的值大,则将这个数的位置往后挪,直到当前外层元素的值大于或等于它前面的位置为止.这具算法在排完前k个数之后,可以保证a[1…k]是局部有序的,保证了插入过程的正确性.

def  insert_sort ( data ):
     for  i  in  range ( 1 ,  len ( data )):
         temp  =  data [ i ]      #data[i] is to insert
         j  =  i  -  1
         while  j  >=  0  and  temp  <  data [ j ]:
             data [ j  +  1 ]  =  data [ j ]
             j  =  j  -  1
         if  j  <>  i  -  1 :
             data [ j  +  1 ]  =  temp       #insert temp


2. 希尔排序

希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。希尔排序基本思想是:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt< dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

def  shell_sort ( data ,  n  =  None ):
     if  n  ==  None :
         n  =  len ( data )  /  2
         if  n  %  2  ==  0 :
             n  =  n  +  1
     for  i  in  range ( 0 ,  n ):
         newdata  =  data [ i : len ( data ): n ]
         insert_sort ( newdata )
         data [ i : len ( data ): n ]  =  newdata
     if  n  <>  1 :
         d  =  n  /  2
         if  d  %  2  ==  0 :
             d  =  d  +  1
         shell_sort ( data ,  d )


3. 性能比较

对2000个随机数进行排序,比较直接插入排序、希尔排序、快速排序、冒泡排序的性能,结果如下 :

shell_sort  0:00:00.110000
insert_sort  0:00:01.391000
quick_sort  0:00:00.047000
bubble_sort  0:00:03.438000


性能排名如下:
快速排序 > 希尔排序 > 直接插入排序 > 冒泡排序

 

Python 天天美味系列(总)   

Python 天天美味(29) - 调用VC++的动态链接库(DLL) 

Python 天天美味(30) - python数据结构与算法之快速排序 

Python 天天美味(31) - python数据结构与算法之插入排序 

Python 天天美味(32) - python数据结构与算法之堆排序 

Python 天天美味(33) - 五分钟理解元类(Metaclasses)[转]

... 

  


本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2008/09/21/1295434.html,如需转载请自行联系原作者


目录
相关文章
|
2天前
|
JSON 数据可视化 Shell
数据结构可视化 Graphviz在Python中的使用 [树的可视化]
数据结构可视化 Graphviz在Python中的使用 [树的可视化]
8 0
|
4天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
4天前
|
算法 机器人 Python
Python实现教程:平面最短路径算法
Python实现教程:平面最短路径算法
12 1
|
5天前
|
算法 前端开发 搜索推荐
前端算法之插入排序
前端算法之插入排序
8 0
|
5天前
|
存储 索引 Python
python数据结构知识学习
【5月更文挑战第6天】Python提供四种核心数据结构:列表(List)——可变有序集合,支持索引和切片;元组(Tuple)——不可变有序集合;字典(Dictionary)——键值对结构,通过键访问值;集合(Set)——无序不重复元素集合,支持数学运算。此外,Python允许自定义数据结构,如链表、树、图,以适应不同问题需求。
13 0
|
5天前
|
存储 Python
Python中的数据结构
Python的数据结构主要包括数字(整数、浮点数、布尔值、复数)、字符串、列表、元组、字典和集合。字符串是字符序列,列表是可变的一维对象集合,元组是不可变的有序集合,字典是键值对的集合,集合是无序且不重复的元素集。此外,Python允许通过定义类创建自定义数据结构,如链表、树、图等,以适应各种问题需求。
9 0
|
5天前
|
搜索推荐 算法 C++
[数据结构]-玩转八大排序(一)&&插入排序&&选择排序
[数据结构]-玩转八大排序(一)&&插入排序&&选择排序
|
5天前
|
C语言
【C语言/数据结构】排序(直接插入排序|希尔排序)
【C语言/数据结构】排序(直接插入排序|希尔排序)
13 4
|
11天前
|
机器学习/深度学习 运维 算法
【Python机器学习专栏】异常检测算法在Python中的实践
【4月更文挑战第30天】本文介绍了异常检测的重要性和在不同领域的应用,如欺诈检测和网络安全。文章概述了四种常见异常检测算法:基于统计、距离、密度和模型的方法。在Python实践中,使用scikit-learn库展示了如何实现这些算法,包括正态分布拟合、K-means聚类、局部异常因子(LOF)和孤立森林(Isolation Forest)。通过计算概率密度、距离、LOF值和数据点的平均路径长度来识别异常值。
|
11天前
|
机器学习/深度学习 数据可视化 算法
【Python机器学习专栏】t-SNE算法在数据可视化中的应用
【4月更文挑战第30天】t-SNE算法是用于高维数据可视化的非线性降维技术,通过最小化Kullback-Leibler散度在低维空间保持数据点间关系。其特点包括:高维到二维/三维映射、保留局部结构、无需预定义簇数量,但计算成本高。Python中可使用`scikit-learn`的`TSNE`类实现,结合`matplotlib`进行可视化。尽管计算昂贵,t-SNE在揭示复杂数据集结构上极具价值。