数据结构Python实现-直接插入排序算法

直接插入排序算法思想:

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

range:

range是左闭右开

for i in range(5):
      print(i)

输出1 2 3 4

直接插入排序代码实现:

def insert_sort(alist):
    n=len(alist)
    for j in range(1,n):  
        for i in range(j):
            if alist[i] > alist[j]:
               alist[j],alist[i]=alist[i],alist[j]
    #return alist
                
                
if __name__ =="__main__":
    alist=[0,1,8,7,9,2,10]
    print(alist)
    insert_sort(alist)
    print(alist) 

此方法是每次都和前面的第一个进行比较,如果前面的大,那么交换,如果一直不大,那么其在原位置不动。其中每次交换后

def insert_sort(alist):
    n=len(alist)
    for j in range(1,n):  
        for i in range(j,0,-1):
            if alist[i] < alist[i-1]:
               alist[i],alist[i-1]=alist[i-1],alist[i]
    #return alist
                
                
if __name__ =="__main__":
    alist=[0,1,8,7,9,2,10]
    print(alist)
    insert_sort(alist)
    print(alist) 

最常见的是此种方法,每次都是把要比较的那个和前面那个进行比较,如果比前面那个小,则进行交换,一直到和第一个比较完毕。这里不懂的地方是怎么从后往前来用Python书写,其(j,0,-1)从 j 开始到 1 步长 -1

def insert_sort(alist):
    n=len(alist)
    for j in range(1,n):  
        i=j
        while i > 0:
            if alist[i] < alist[i-1]:
               alist[i],alist[i-1]=alist[i-1],alist[i]
               i-=1
            else:
                break;
    #return alist
                
                
if __name__ =="__main__":
    alist=[0,1,8,7,9,2,10]
    print(alist)
    insert_sort(alist)
    print(alist) 

while方法写直接插入排序

range用法巩固

  • range(9) 为0~8的有序集合
  • range(start,stop,[step]) start表示数字的开始值,stop代表数字的结束值,step代表循环时数字递增的步长(默认值为1)

你可能感兴趣的:(数据结构Python实现-直接插入排序算法)