排序算法(三)之插入排序

一、插入排序
什么是插入排序?
插入排序的原理是什么?
能不能用python代码敲出一个实例?
带着以上三个疑问来阅读笔者的这篇文章;也正是如此,该篇的目的就是要清清楚楚的回答这些问题。
插入排序:首先,从字面意思上理解:是插入,将元素插入进去,因为,跟中间性的插入密切相关;至于到底怎么插入,我们通过例子来一步步看懂它的原理
比如:有一个列表【15、7、99、81、37、11、46】,请用插入排序的方法将其升序排列
  第一轮:第一个元素不动,把第2个元素与第1个元素去比较,如果第2个比第1个小,就可以插进去,也就是小的排在前面,大的排后面
        7、15
  第二轮:把99跟前面已排好的相比较,比7、15都要大,所以插不进去,只能排在后面
        7、15、99
  第三轮:把81跟前面已排好的相比较,比99小,插在99前面,比15大,插不进去,只能排15的后面
        7、15、81、99
  第四轮:把37跟前面已排好的相比较,比81小,比15大,插在它们两个之间
        7、15、37、81、99
  第五轮:把11跟前面已排好的相比较,比15小,比7大,插进它们两个之间
        7、11、15、37、81、99
  第六轮:把46跟前面已排好的相比较,比37大,比81小,插进它们两个之间
        7、11、15、37、46、81、99
因此,此时已经排序完成。通过上面的一步步分析,其实质就是把后面的元素跟前面已排好的元素作大小比较,插进能插入的位置即可,插不进就直接排在后面,怎么插入就是比大小
以上只是我的个人简单分析,上面在分析过程中没有写出来的元素,并不是没有,是存在的,只是我为了一步步分析,没有写全。我在稿纸上是写了的

看下面的python代码实现:

def insert_Sort(arr):
    # 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
    for i in range(len(arr)):
        m = i - 1
        n = arr[i]
        while m >= 0 and arr[m] > n:
            arr[m + 1] = arr[m]
            m = m - 1
        arr[m + 1] = n
    return arr


li3 = [15, 7, 99, 81, 37, 11, 46]
print(insert_Sort(li3))

posted @ 2021-11-11 22:02  excellent_1  阅读(181)  评论(0编辑  收藏  举报