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,如需转载请自行联系原作者


目录
相关文章
|
7天前
|
存储 算法 NoSQL
python技术面试题(十六)--数据结构与算法
python技术面试题(十六)--数据结构与算法
|
2月前
|
机器学习/深度学习 算法 搜索推荐
【排序算法】冒泡排序,选择排序,插入排序算法原理及Python代码实现
【排序算法】冒泡排序,选择排序,插入排序算法原理及Python代码实现
|
2月前
|
搜索推荐 算法 Python
玩转Python插入排序,从基础到进阶
插入排序是一种简单但有效的排序算法。它的基本思想是将待排序的元素逐个插入已排序序列中的正确位置,直到所有元素都被插入完成。插入排序的算法复杂度为O(n^2),适用于小规模的数据排序。本文将介绍插入排序的原理、具体实现和优化,并提供相关的Python代码示例。
37 0
|
9月前
|
算法 Python
Python数据结构与算法(20)---插值查找
Python数据结构与算法(20)---插值查找
78 0
Python数据结构与算法(20)---插值查找
|
9月前
|
算法 索引 Python
Python数据结构与算法(19)---二分查找
Python数据结构与算法(19)---二分查找
61 0
Python数据结构与算法(19)---二分查找
|
9月前
|
算法 搜索推荐 数据库
Python数据结构与算法(18)---检索算法
Python数据结构与算法(18)---检索算法
108 0
Python数据结构与算法(18)---检索算法
|
9月前
|
算法 搜索推荐 Python
Python数据结构与算法(17)---归并排序
Python数据结构与算法(17)---归并排序
59 0
Python数据结构与算法(17)---归并排序
|
9月前
|
存储 算法 Python
Python数据结构与算法(16)---快速排序
Python数据结构与算法(16)---快速排序
82 0
Python数据结构与算法(16)---快速排序
|
9月前
|
算法 搜索推荐 Python
Python数据结构与算法(14)---插入排序
Python数据结构与算法(14)---插入排序
73 0
Python数据结构与算法(14)---插入排序
相关产品
机器翻译
推荐文章
更多