常见算法之‘插入类排序’

插入类排序:

  每步将一个待排序的记录,按其排序码大小,插到前面已经排序的文件中的适当位置,直到全部插完为止。

1.直接插入排序

  1.算法思想:从待排序的第n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。

  2.代码:  

def insert_sort(array):
    n=len(array)
    for i in range(1,n):
        if array[i]<array[i-1]:
            temp=array[i]
            index=i        #待插入的下标
            for j in range (i-1,-1,-1):    #从i-1循环到0
                if array[j]>temp:
                    array[j+1]=array[j]
                    index[j]        #记录待插入下标
                else:
                    break
            array[index]=temp
    return array

2.shell排序(希尔排序):

  1.原理:是对相邻指定距离(称为增量)的元素进行比较,并不断把增量缩小至1,完成排序。

     shell排序时,开始时增量比较大,分组较多,每组的记录数目较少,用此,在各组内采用直接插入排序较快,后来增量di逐渐缩小,分组数减少,各组的记录数增多,

     但由于按(di-1)分组排序,文件较接近于有序状态,所以新的一趟排序过程较快,因此shell排序在效率上比直接插入排序有较大的改进。

  2.代码:   

def shellsort(nums):
    step=len(nums)//2    #设定步长
    while step>0:
        for i in range(step,len(nums)):    
            while i>=step and nums[i-step]>nums[i]:    #类似插入排序,当前值与指定步长之间的值比较
                                                                                符合条件则交换位置
                nums[i],nums[i-step]=muns[i-step],mums[i]
                i-=step
    return nums

  

原文地址:https://www.cnblogs.com/jacky912/p/10697779.html