python插入排序

简介: 插入排序(Insertion Sort)的基本思想是:将列表分为2部分,左边为排序好的部分,右边为未排序的部分,循环整个列表,每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。

插入排序(Insertion Sort)的基本思想是:将列表分为2部分,左边为排序好的部分,右边为未排序的部分,循环整个列表,每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。

这里写图片描述

插入排序非常类似于整扑克牌。

在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。
也许你没有意识到,但其实你的思考过程是这样的:现在抓到一张7,把它和手里的牌从右到左依次比较,7比10小,应该再往左插,7比5大,好,就插这里。为什么比较了10和5就可以确定7的位置?为什么不用再比较左边的4和2呢?因为这里有一个重要的前提:手里的牌已经是排好序的。现在我插了7之后,手里的牌仍然是排好序的,下次再抓到的牌还可以用这个方法插入。编程对一个数组进行插入排序也是同样道理,但和插入扑克牌有一点不同,不可能在两个相邻的存储单元之间再插入一个单元,因此要将插入点之后的数据依次往后移动一个单元。

source = [92, 77, 67, 8, 6, 84, 55, 85, 43, 67]


for index in range(1,len(source)):
    current_val = source[index] #先记下来每次大循环走到的第几个元素的值
    position = index

    while position > 0 and source[position-1] > current_val: #当前元素的左边的紧靠的元素比它大,要把左边的元素一个一个的往右移一位,给当前这个值插入到左边挪一个位置出来
        source[position] = source[position-1] #把左边的一个元素往右移一位
        position -= 1 #只一次左移只能把当前元素一个位置 ,还得继续左移只到此元素放到排序好的列表的适当位置 为止

    source[position] = current_val #已经找到了左边排序好的列表里不小于current_val的元素的位置,把current_val放在这里
    print(source)
结果:

[77, 92, 67, 8, 6, 84, 55, 85, 43, 67]
[67, 77, 92, 8, 6, 84, 55, 85, 43, 67]
[8, 67, 77, 92, 6, 84, 55, 85, 43, 67]
[6, 8, 67, 77, 92, 84, 55, 85, 43, 67]
[6, 8, 67, 77, 84, 92, 55, 85, 43, 67]
[6, 8, 55, 67, 77, 84, 92, 85, 43, 67]
[6, 8, 55, 67, 77, 84, 85, 92, 43, 67]
[6, 8, 43, 55, 67, 77, 84, 85, 92, 67]
[6, 8, 43, 55, 67, 67, 77, 84, 85, 92]
#更容易理解的版本

 data_set = [ 9,1,22,9,31,-5,45,3,6,2,11 ]
 for i in range(len(data_set)):
      #position  = i
      while i > 0 and data_set[i] < data_set[i-1]:# 右边小于左边相邻的值
          tmp = data_set[i]
          data_set[i] = data_set[i-1]
          data_set[i-1] = tmp
          i -= 1
      # position  = i
     # while position > 0 and data_set[position] < data_set[position-1]:# 右边小于左边相邻的值
     #     tmp = data_set[position]
     #     data_set[position] = data_set[position-1]
     #     data_set[position-1] = tmp
     #     position -= 1
目录
相关文章
|
5月前
|
Python
Python基础【素数判断、插入字符串、插入排序】
Python基础【素数判断、插入字符串、插入排序】
|
3月前
|
搜索推荐 Python
python实现插入排序算法。
python实现插入排序算法。
13 4
|
3月前
|
搜索推荐 Python
Python 插入排序:原理、使用场景与实现方法
本文主要介绍了Python 插入排序:原理、使用场景与实现方法
35 6
|
4月前
|
搜索推荐 算法 Python
【Python排序算法系列】—— 插入排序
【Python排序算法系列】—— 插入排序
24 0
|
6月前
|
算法 搜索推荐 Python
Python算法——插入排序
Python算法——插入排序
72 0
|
6月前
|
算法 搜索推荐 Python
python算法 - 插入排序算法
python算法 - 插入排序算法
|
10月前
|
机器学习/深度学习 算法 搜索推荐
【排序算法】冒泡排序,选择排序,插入排序算法原理及Python代码实现
【排序算法】冒泡排序,选择排序,插入排序算法原理及Python代码实现
|
10月前
|
搜索推荐 算法 Python
玩转Python插入排序,从基础到进阶
插入排序是一种简单但有效的排序算法。它的基本思想是将待排序的元素逐个插入已排序序列中的正确位置,直到所有元素都被插入完成。插入排序的算法复杂度为O(n^2),适用于小规模的数据排序。本文将介绍插入排序的原理、具体实现和优化,并提供相关的Python代码示例。
111 0
|
12月前
|
算法 搜索推荐 Python
Python3 数据结构与算法之插入排序
Python3 数据结构与算法之插入排序