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)