美文网首页
插入排序算法

插入排序算法

作者: 赶赶妈 | 来源:发表于2019-07-09 13:49 被阅读0次

插入排序包含两种,一种是直接插入排序,另一种是希尔排序算法。直接插入排序适用于小数据或者基本有序的数组,而希尔排序适合较大数据量。
在生活中,我们要对书籍或者档案按编号排序,经常采用插入排序的方法。
1、直接插入排序
基本思想:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
源码:

#coding:utf-8
def sort(origin_lis):
    """
    插入排序算法
    适用于小数据和数组基本有序的
    :param origin_lis: 排序的原始数组
    :return:
    """
    for i in range(1, len(origin_lis)):
        # 保存待插入的元素值
        temp = origin_lis[i]
        # 记录开始比较的下标
        j = i - 1
        # 遍历待插入元素左边的值,找到合适位置插入
        while j > -1 and origin_lis[j] > temp:
            origin_lis[j + 1] = origin_lis[j]
            j -= 1
        origin_lis[j + 1] = temp
    return origin_lis

if __name__ == '__main__':
    print sort([4,2,3,5,12,13,7,555,4,5,8,2,1,4,7])

2、希尔排序
它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。希尔排序实质上是一种分组插入方法。
基本思想:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。
一般gap按 数列长度多次减半得到

源码:

#coding:utf-8
def sort(origin_lis, increment):
    """
    希尔插入排序算法,适合大数据量数列
    :param origin_lis: 排序的原始数组
    :param increment : 步长
    :return:
    """
    for i in range(increment, len(origin_lis)):
        # 保存待插入的元素值
        temp = origin_lis[i]
        # 记录开始比较的下标
        j = i - increment
        while j > -1 and origin_lis[j] > temp:
            origin_lis[j + increment] = origin_lis[j]
            j -= increment
        origin_lis[j + increment] = temp

if __name__ == '__main__':
    lis = [2, 3, 5, 12, 13, 7, 555, 4, 5, 8, 2, 1, 4, 7]
    increment = len(lis) / 2
    while increment > 0:
        sort(lis, increment)
        increment /= 2
    print lis

希尔排序的sort和直接插入排序的sort代码基本一致

相关文章

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

  • python 冒泡排序和选择排序算法

    插入排序算法 冒泡排序算法

  • c算法O(n)^2(一)

    选择排序 插入排序 优化插入排序算法

  • Chapter 2 Foundation of Algorith

    Chapter 2 插入排序 线性查找 选择算法 归并排序算法 二分查找算法 冒泡排序 插入排序 循环不...

  • 算法入门——插入排序、快速排序

    上篇文章学习了算法入门——冒泡排序、选择排序,这篇文章我们学习算法入门——插入排序。 插入排序 插入排序是在一组列...

  • 插入排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 插入排序算法实现很简单直接,附...

  • 插入排序

    插入排序 插入排序(Insertion-Sort)是一种简单直观的排序算法。排序算法(英语:Sorting alg...

  • 排序算法(三)折半插入排序算法

    排序算法(三)折半插入排序算法 1.基本概念  折半插入排序(Binary-Insertion-Sort)是对插入...

  • 《算法4》2.1 - 插入排序算法(Insertion Sort

    排序算法列表电梯: **选择排序算法:详见 Selection Sort ** 插入排序算法(Insertion ...

  • 排序

    本文记录几个基础的排序算法。排序算法分为插入排序、交换排序、选择排序等几大类。 插入排序 1. 直接插入排序 O(...

网友评论

      本文标题:插入排序算法

      本文链接:https://www.haomeiwen.com/subject/iirxkctx.html