直接插入排序的两种做法
可能很多人不会留意到这个问题,今天恰好碰到了,然后来稍微讨论一下 直接插入排序应该是很多数据结构与算法书里第一个讲的排序算法,算法的描述是这样的: 把待排序列视作两段,一段是已排序列,一段是未排序列。每一趟排序时,为未排序列的首位在已排序列中进行查找(因为是直接插入排序,所以这里特指逐个比较)其合适的位置,然后将其插入(插入的过程中伴随着一系列元素的后移)。 当时没有想太多,直接写了个按文字描述的代码: def InsertSort1(LIST): for i in range(1,len(LIST)):#从1开始,将0元素视为已排序列 TEMP=LIST[i]#保存中间变量 for ii in range(0,i): if LIST[ii]>TEMP:#从前往后逐次比较,如果出现比它大的元素,那么就说明他应该落在此位。此处未加等于号是为了保证排序稳定性 for iii in range(i,ii,-1):#注意,从后往前位移元素 LIST[iii]=LIST[iii-1] LIST[ii]=TEMP break return LIST 后来在看的时候发现好像不太对劲,怎么嵌套了三层for,于是乎回忆起了这一段应该是从后往前进行比较的 def InsertSort2(LIST): for i in range(1,len(LIST)): TEMP=LIST[i] flag=True