排序系列-直接排序

http://blog.csdn.net/pzhtpf/article/details/7559896 这儿有篇文章,讲述了8个排序算法,是使用java实现的,这几天正在强化本身的python技能,何不使用python也实现一把。java

先来看看8种排序之间的关系:python

 

 

1,  直接插入排序算法

   (1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已是排数组

好顺序的,如今要把第n个数插到前面的有序数中,使得这n个数.net

也是排好顺序的。如此反复循环,直到所有排好顺序。指针

这个sort算法还费了我很多的时间,究其缘由就是一时半会儿的也没理解这个究竟是怎么排序的,笨点儿没办法,只有多花点儿时间了,多研究一番,最后仍是理解了。code

 

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