Python 插入排序

插入排序,是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

def insertionSort(list):                               
    for i in range(1,len(list)):                       
        point=list[i]                                  
        print('point:',point,'i:',i)                   
        for j in range(i-1,-1,-1):                     
            print('---------',j)                       
            if  point < list[j]:                       
                list[j+1],list[j] = list[j] ,list[j+1] 
                print('list[j+1]',list[j+1],'j:',j)    
                print(list)                            
            else:                                      
                break                                  
    return list                                        
arr = [12, 11, 13,45, 5, 6,20,1,56 ,2,3]               
aa=insertionSort(arr)                                  
print(aa)     
结果:只显示当poont=3 时打印结果
point: 3 i: 10
----j----- 9
list[j+1] 56 j: 9
[1, 2, 5, 6, 11, 12, 13, 20, 45, 3, 56]
----j----- 8
list[j+1] 45 j: 8
[1, 2, 5, 6, 11, 12, 13, 20, 3, 45, 56]
----j----- 7
list[j+1] 20 j: 7
[1, 2, 5, 6, 11, 12, 13, 3, 20, 45, 56]
----j----- 6
list[j+1] 13 j: 6
[1, 2, 5, 6, 11, 12, 3, 13, 20, 45, 56]
----j----- 5
list[j+1] 12 j: 5
[1, 2, 5, 6, 11, 3, 12, 13, 20, 45, 56]
----j----- 4
list[j+1] 11 j: 4
[1, 2, 5, 6, 3, 11, 12, 13, 20, 45, 56]
----j----- 3
list[j+1] 6 j: 3
[1, 2, 5, 3, 6, 11, 12, 13, 20, 45, 56]
----j----- 2
list[j+1] 5 j: 2
[1, 2, 3, 5, 6, 11, 12, 13, 20, 45, 56]
----j----- 1
break
最终结果 [1, 2, 3, 5, 6, 11, 12, 13, 20, 45, 56]

人家写的:

 1 def insertionSort(arr):                          
 2    for i in range(1, len(arr)):                  
 3       key = arr[i]                               
 4       print('key:',key,'i=',i)                   
 5       j = i - 1                                  
 6       print('--- j ---',j)                       
 7       while j >= 0 and key < arr[j]:             
 8          arr[j + 1] = arr[j]                     
 9          print('arr[j + 1]',arr[j + 1],'j:',j)   
10          print(arr)                              
11          j -= 1                                  
12       print('j=',j)                              
13       arr[j + 1] = key                           
14       print('shuzu',arr)                         
15       print('     ')                             
16    return  arr                                   
17 arr = [12, 11, 13,45, 5, 6,20,1,56 ,2,3]         
18 print("排序后的数组:",insertionSort(arr) )      
结果:只显示当key: 3 i= 10 时的打印结果
--- j --- 9
arr[j + 1] 56 j: 9
[1, 2, 5, 6, 11, 12, 13, 20, 45, 56, 56]
arr[j + 1] 45 j: 8
[1, 2, 5, 6, 11, 12, 13, 20, 45, 45, 56]
arr[j + 1] 20 j: 7
[1, 2, 5, 6, 11, 12, 13, 20, 20, 45, 56]
arr[j + 1] 13 j: 6
[1, 2, 5, 6, 11, 12, 13, 13, 20, 45, 56]
arr[j + 1] 12 j: 5
[1, 2, 5, 6, 11, 12, 12, 13, 20, 45, 56]
arr[j + 1] 11 j: 4
[1, 2, 5, 6, 11, 11, 12, 13, 20, 45, 56]
arr[j + 1] 6 j: 3
[1, 2, 5, 6, 6, 11, 12, 13, 20, 45, 56]
arr[j + 1] 5 j: 2
[1, 2, 5, 5, 6, 11, 12, 13, 20, 45, 56]
j= 1
shuzu [1, 2, 3, 5, 6, 11, 12, 13, 20, 45, 56]
排序后的数组: [1, 2, 3, 5, 6, 11, 12, 13, 20, 45, 56]

 

posted on 2023-06-30 15:06  如尘如水  阅读(60)  评论(0)    收藏  举报