插入排序算法回顾(python实现)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序算法回顾(python实现)相关的知识,希望对你有一定的参考价值。

插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。

折半插入排序是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。具体操作为:在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为a[low],末元素设置为a[high],则轮比较时将待插入元素与a[m],其中m=(low+high)/2相比较,如果比参考元素小,则选择a[low]到a[m-1]为新的插入区域(即high=m-1),否则选择a[m+1]到a[high]为新的插入区域(即low=m+1),如此直至low<=high不成立,即将此位置之后所有元素后移一位,并将新元素插入a[high+1]。

c=[-1,49,38,65,97,76,13,27,49]    #其中[0]=-1这一位置是暂存单元
d=[-1,49,38,65,97,76,13,27,49]

#直接插入排序------------------------------------------------------
def InsertSort(list):
    for i in range(2,len(list)):
        if list[i]<list[i-1]:       #小于的话,需要将list[i]插入有序子表
            list[0]=list[i]         #复制为哨兵
            list[i]=list[i-1]       #先将list[i]前面一元素后移一位
            j=i-2                   #从list[i]前面的前面开始逐一判断
            while list[0]<list[j]:  
                list[j+1]=list[j]
                j-=1
            list[j+1]=list[0]       #最后要是不比[j]小,就插在[j+1]处

#折半插入排序------------------------------------------------------
def BinaryInsertSort(list):
    for i in range(2,len(list)):
        list[0]=list[i]
        low=1
        high=i-1
        while low<=high:
            m=(low+high)/2          #折半
            if list[0]<list[m]:     #插入点在低半区
                high=m-1
            else:                   #插入点在高半区
                low=m+1
        j=i-1                       #记录后移
        while j>=high+1:
            list[j+1]=list[j]
            j-=1
        list[high+1]=list[0]



InsertSort(c)
print c[1:]

BinaryInsertSort(d)
print d[1:]

 

结果输出有序列表:

技术分享

以上是关于插入排序算法回顾(python实现)的主要内容,如果未能解决你的问题,请参考以下文章

7种基本排序算法的Java实现

python实现时间复杂度平均为N^2的冒泡选择插入排序

python实现时间复杂度平均为N^2的冒泡选择插入排序

python实现时间复杂度平均为N^2的冒泡选择插入排序

python实现时间复杂度平均为N^2的冒泡选择插入排序

快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)