zoukankan      html  css  js  c++  java
  • 内排序之直接插入排序

    • 我们一般最开始接触的排序就是插入排序,它看上去非常简单,可是如果没有弄清楚他的细节,自己手写一个插入排序,也是会出各种错,甚至就是写不出来,直到看到答案,再恍然大悟,奥,然后下次还是写不出,不用说,本人就经历过几次这样的情景,所以,虽然简单,还是有必要踏踏实实弄清楚这个最基础的算法。

    处理方法

    1. 初始状态:有一个n个元素的数组待排序,迭代指针初始为第二个元素 (下标为1),设该元素为key,key左侧的元素在初始时是有序的,很好理解,因为初始时,key左侧只有一个元素,一个元素是有序的。

    2. 迭代状态:将key插入左侧有序的数组,然后迭代指针右移一位。

    3. 终止状态:迭代指针到了整个数组的最后一位,并将最后一位插入到了左侧对应的位置,排序完成。

    细节处理

    • 我们用最简单的整数排序来做例子
    • c是一个整数数组, 变量i用来标志1到len(c)的数组下标,初始时i = 1, key = c[i] = c[1],变量j用来标志key左侧有序数组的下标,初始时,j = 0,c[j] = c[0]
    • 我们需要用一个双层循环来处理这个排序,外层循环的上下界是1和len(c), 左侧已排序的数组的上下界是0和j
    • python2.x 如下代码:
    c = []
    for i in range(5):
        item = int(raw_input("请输入数值:"))
        c.append(item)
    
    length = len(c)
    for i in range(1, length):
        j = i - 1
        key = c[i]
        while j >= 0 and key < c[j]:
            c[j], c[j + 1] = c[j + 1], c[j]
            j -= 1
    
    print c
    

    外层循环,是由前向后迭代1-len(c),内层循环是由后向前迭代0-j,如果key小于c[j],就交换c[j]和c[j+1],j-=1

    ps

    • 用python实现这个排序,网上有很多教程,在交换c[j]和c[j+1]的时候,引入了一个中间变量,像c语言,两个值交换的时候,需要引入中间变量,但是在python里,可以直接交换,上面这样写比较pythonic。
  • 相关阅读:
    RTSP/RTMP/GB28181协议视频监控平台搭建之国网B接口协议介绍
    如何判断视频流媒体播放器EasyPlayerRTSPWin的磁盘空间是否满足剩余的要求?
    H.265编码全面应用于TSINGSEE青犀视频全产品链,让视频更清晰!
    视频流媒体播放器EasyPlayerRTSP原始录像文件被新录像文件覆盖是什么原因?
    RTSP/RTMP/GB28181协议TSINGSEE青犀视频云服务搭建H265开发环境无法启动是什么原因?
    H265流媒体播放器EasyPlayer.JS在web开发项目中引用报“webAssembly instantiate”错误解决方案
    使用Opengl实现天空盒
    手机探索者开发实录—数据打包
    游戏开发中的设计模式之一-Strategy模式
    手机探索者开发实录—rndis/usbnet
  • 原文地址:https://www.cnblogs.com/becker/p/7902782.html
Copyright © 2011-2022 走看看