排序系列-插入排序

# -*- 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))
相关文章
相关标签/搜索