您的位置:首页 > 其它

排序系列-插入排序

2016-11-29 00:00 134 查看
# -*- 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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: