# -*- coding: UTF-8 -*- ''' Created on 2016年11月25日 @author: llg ''' # 直接插入排序 from scipy.io.matlab.miobase import arr_dtype_number def 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))