排序系列-插入排序

# -*- 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))
相關文章
相關標籤/搜索