# -*- 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))