python算法 - 插入排序算法

简介: python算法 - 插入排序算法

插入排序的基本概念:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置

# -*- encoding: utf-8 -*-
def insertion_sort(iterable,cmp=cmp):
    """插入排序,伪码如下:
    INSERTION-SORT(A)
    1  for j ← 2 to length[A] // 从第二个数开始
    2    do key ← A[j] // 该数作为待排序的数
    3      ▷ Insert A[j] into the sorted sequence A[1..j-1]. // 将key插入已排序子数组
    4      i ← j-1 // key前一位索引
    5      while i > 0 and A[i] > key // 前一位存在且大于key时
    6        do A[i+1] ← A[i] // 后移一位
    7           i ← i-1 // 索引再向前一位
    8      A[i+1] ← key // 直到前一位不存在或<=key了,key插入
    T(n) = θ(n^2)
    Args:
        iterable (Iterator): 可迭代对象。
        cmp (Function): 比较函数。默认为内建函数cmp()。
    Returns:
        一个排序后的列表。
    """
    if (iterable== None):
        return None
    lst= []# 结果列表
    length= len(iterable)
    for keyin iterable:
        i= len(lst)# 列表长度
        # 从末尾往前与key比较,直到不大于key
        while i >0 and cmp(lst[i-1], key) >0:
            i= i- 1
        lst.insert(i, key);# i处插入key
    return lst
if __name__== '__main__':
    import random, timeit
    items= range(10000)
    random.shuffle(items)
    def test_sorted():
        print(items)
        sorted_items= sorted(items)
        print(sorted_items)
    def test_insertion_sort():
        print(items)
        sorted_items= insertion_sort(items)
        print(sorted_items)
    test_methods= [test_sorted, test_insertion_sort]
    for testin test_methods:
        name= test.__name__# test.func_name
        t= timeit.Timer(name+ '()','from __main__ import ' + name)
        print(name+ ' takes time : %f' % t.timeit(1))
相关文章
|
4天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
19 4
|
4天前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
22 6
|
2天前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
11 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
2天前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
7天前
|
算法 安全 Go
RSA加密算法详解与Python和Go实现
RSA加密算法详解与Python和Go实现
11 1
|
7天前
|
存储 算法 安全
Python 加密算法详解与应用
Python 加密算法详解与应用
9 1
|
1天前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
10 0
|
5天前
|
搜索推荐 算法 Shell
Python 金典的“八大排序算法”
Python 金典的“八大排序算法”
8 0
|
6天前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
7天前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
17 0