`

排序算法学习(python版本)之插入排序(InsertionSort)

阅读更多
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
最差时间复杂度:O(n^2)
最优时间复杂度:O(n)
平均时间复杂度:O(n^2)


算法描述:
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:


  •   1. 从第一个元素开始,该元素可以认为已经被排序
  •   2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  •   3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  •   4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  •   5. 将新元素插入到该位置后
  •   6. 重复步骤2~5

如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。

代码:


#!/usr/bin/env python

#-*-encoding:utf-8-*-



#InsertionSort

def insertion_sort(param):
    p_len = len(param)
    for i in range(1,p_len):
        key = param[i]
        for j in range(1,i+1)[::-1]:
            if j>0 and key < param[j-1]:
                param[j] = param[j-1]
                param[j-1] = key
    return param

def main():
    param = [5,7,2,9,1]
    print insertion_sort(param)

if __name__=="__main__":
    main()


参考资料:

http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F
算法导论 第二章
分享到:
评论

相关推荐

    python常用排序算法汇总

    # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() #计数排序 # sort.quickSort() #快速排序 该排序算法把每次的排序结果都列出来,可供初学...

    基于python的排序算法-插入排序Insertion Sort

    **插入排序(Insertion Sort)**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到...

    排序算法之Python

    三、插入排序(Insertion Sort) 插入排序类似于打扑克牌,每拿到一张牌就找到它在已排序牌堆中的正确位置并插入。在Python中,插入排序通常使用一个嵌套循环,外层循环控制未排序部分,内层循环找到插入位置并将...

    各种排序算法的Python实现

    通过学习和实践这些排序算法的Python实现,不仅可以提升编程技巧,还能加深对算法的理解,有助于解决实际问题。在代码练习中,可以针对不同的数据结构和场景,对比这些算法的性能,选择最适合的排序方法。同时,了解...

    排序算法_python_

    2. 插入排序(Insertion Sort): 插入排序的工作原理是将未排序的元素逐个插入到已排序的序列中,保持排序状态。Python实现插入排序时,可以使用一个for循环遍历待排序元素,然后通过while循环找到正确位置并插入。...

    排序算法_排序算法实现_python排序_排序算法_light9m6_

    本文将详细讨论在Python中实现的三种基本排序算法:冒泡排序、选择排序和插入排序,这些都是`light9m6`提供的教学资源。 首先,我们来了解冒泡排序(Bubble Sort)。这是一种简单直观的排序算法,它重复地遍历要...

    八大排序算法的python实现

    希尔排序,也称为递减增量排序算法,是插入排序的一种更高效的改进版本。它首先取一个较大的步长,逐步缩小步长直到为1,对每个步长进行插入排序。Python实现代码如下: ```python def shell_sort(list): n = len...

    Python3实现插入排序算法(源代码)

    ### 插入排序算法概述 #### 一、概念与特点 插入排序(Insertion Sort)是一种简单的比较排序算法。...通过对其实现的理解,可以帮助开发者更好地掌握排序算法的基本概念,并为学习更复杂的排序算法打下基础。

    Python实现10大排序算法.rar

    2. 插入排序(Insertion Sort):插入排序将未排序的元素逐个插入到已排序的部分,保持已排序部分的有序性。它的平均时间复杂度为O(n^2),但在部分有序的数组中表现良好。 3. 选择排序(Selection Sort):选择排序...

    Python实现经典排序算法.rar

    2. 插入排序(Insertion Sort):插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。其平均和最好情况的时间复杂度为O(n^2),但在处理部分有序的数据时表现...

    Python实现插入排序.rar

    在实际编程中,Python提供了内置的`sorted()`函数和`list.sort()`方法,它们通常使用更高效的排序算法(如Timsort),但在学习和理解排序算法的过程中,插入排序是一个很好的起点。通过阅读和分析“Python实现插入...

    Python-将几种著名的排序算法可视化的一些python脚本并通过Matplotlib生成动画

    在Python编程领域,排序算法是数据结构与算法学习中的核心部分。这些算法处理数组或列表中的元素,使得它们按照特定顺序排列。可视化排序算法能够帮助我们更好地理解它们的工作原理,而Matplotlib是一个强大的Python...

    Python常见排序算法汇总共2页.pdf.zip

    2. 插入排序(Insertion Sort):它的工作原理类似于手动排序扑克牌,每次将一个未排序的元素插入到已排序的序列中的正确位置。 3. 选择排序(Selection Sort):每次找出未排序部分的最大(或最小)元素,放到已...

    直接插入排序算法

    直接插入排序是一种基础且常用的排序算法,尤其在处理小规模或者部分有序的数据时表现出较高的效率。这个算法的主要思想是将一个记录(数组中的一个元素)插入到已经排序好的有序序列中,从而得到一个新的、记录数加...

    冒泡与插入排序 两个排序算法

    在计算机科学领域,排序算法是数据结构与算法课程中的重要组成部分,它们对于数据的组织、检索和处理至关重要。本文将深入探讨两种基本的排序...通过学习这两种排序算法,可以为进一步学习更复杂的算法打下坚实的基础。

    Python插入排序.docx

    ### 插入排序知识点详解 #### 一、插入排序简介 插入排序是一种直观且易于实现的排序算法。其工作原理类似于人们日常生活中整理牌时所采用...此外,由于其实现简单,插入排序也常被用来作为学习排序算法的基础案例。

    直接插入排序python'.rar

    直接插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。这种排序算法适用于小规模或者部分有序的数据集,它的主要步骤包括比较...

    插入排序算法.zip

    在这个压缩包中,包含的是关于插入排序的基本概念、希尔排序(插入排序的一种改进版本)的详细讲解,以及对应的Python源代码实现,每行代码都有清晰的注释,方便理解。 ### 基本插入排序 基本插入排序是对未排序的...

    第005章 基于python常问排序算法.rarpython面试

    3. **插入排序** (Insertion Sort) 插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。时间复杂度在最好情况(已排序)下为O(n),最坏情况(逆序)下为O(n^2)。 4. **...

Global site tag (gtag.js) - Google Analytics