zoukankan      html  css  js  c++  java
  • 排序算法(三)之插入排序

    一、插入排序
    什么是插入排序?
    插入排序的原理是什么?
    能不能用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))
    

  • 相关阅读:
    (二) 线程创建、中止、中断、线程Join、优先级、调度
    cmake 生成64位项目
    ffmpeg + sdl player console
    ffmpeg cmd
    ffmpeg coco2d-x lua test
    ffmpeg windows config win32/win64 compile
    ffmpeg configure --help
    ffmpeg Windows platfrom ndk compile ffmpeg
    NDK r21编译FFmpeg 4.2.2(x86、x86_64、armv7、armv8)
    解决NDK交叉编译 selected processor does not support ARM mode libtheora的错误
  • 原文地址:https://www.cnblogs.com/xj-excellent/p/15542126.html
Copyright © 2011-2022 走看看