# -*- coding: UTF-8 -*- '''Created on 2016年11月25日@author: llg'''# 直接插入排序from scipy.io.matlab.miobase import arr_dtype_numberdef InsertSort(mylist): size = len(mylist) i = 1 for i in range(1, size): #判断是否需要交换 ''' 如果需要排序,这个时候才需要对之前已经排序好的的进行插入 ''' if mylist[i] < mylist[i-1]: # 记录当前小插入的值 tmp = mylist[i] #记录需要循环判断是否需要插入的范围 j = i - 1 # 向后移动一位 mylist[j + 1] = mylist[j] j = j - 1 while j >= 0 and mylist[j] > tmp: mylist[j + 1] = mylist[j] j = j - 1 mylist[j + 1] = tmp mylist0 = [12, 11, 13, 1, 2, 4, 3]#InsertSort(mylist0)#print(mylist0)def insert_sorts(arr): size = len(arr) for i in range(1,size): #发生乱序,这个时候就需要开始移动数据里 if arr[i-1]>arr[i]: # 先把 i位的数据拿出来,这个就是需要插入到之前已经排好序的列表中的数据 tem = arr[i] # 替换数据 arr[i] = arr[i-1] ''' 接下来要做的就是,将这个新插入的数据,再同之前已经排好序的数据进行逐个比较,来判断这厮究竟应该放在哪个位置 ''' j = i-1; while j>=0 and arr[j]>tem: ''' 遍历之前已经排序号的数组,从大到小,判断最终这个值应该插入的位置, ''' arr[j+1] = arr[j] ## 移动后,指针向前移动一位 ''' 这里解释为什么后面 是将 tem 赋值给了 arr[j+1] 假设j=0 时 j=j-1 为-1 再次循环,不满足条件,这个是什么意思呢,此时j已经为-1,了,所有的遍历都结束了,这个时候,就应该把 tem的值赋给 0 位,应为0位的值已经 给了1 ,所有最后有一行 arr[j+1] = tem ''' j = j-1; arr[j+1]=tem insert_sorts(mylist0)print (mylist0)# # # def insert_sort(arr):# size= len(arr)# for i in range(1,size):# insert(arr, i)# # return arr# def insert(arr,i):# tmp=arr[i]# j=i# ## 只有在j>0,并且# while j>0 and tmp< arr[j-1]:# arr[j]=arr[j-1]# # java种的j--# j-=1;# # arr[i]=tmp# # # mylist0 = [12, 11, 13, 1, 2, 4, 3]# # print mylist0# # print (insert_sort(mylist0))