Python 插入排序

2021-08-26 11:57:07 字數 1605 閱讀 3274

把第乙個數固定,然後將其它數插入,小的放前面。備份這個後續插入的數,然後將這個數和前面的數作比較,比前面的數小,就將前面的數後移。這樣相當於前面的數就挪出乙個空,如果再往前沒有比它小的了,就把開始備份好的數填進去。

插入排序,穩定,平均和複雜都是o(

n2) o(n

2)

def

insert_sort

(l):

for i in range(1, len(l)):

# 第1個數,index=0,單獨拿出來

v = l[i]

j = i

while j>=1

and l[j-1]>v:

# j大於等於1,檢視前乙個數

# 只要前面的數l[j-1]大於k,就往後移

l[j] = l[j-1]

j -= 1

l[j] = v

def

insert_sort

(l):

for i in range(1, len(l)):

v = l[i]

j = i - 1

while j>=0

and l[j]>v:

# 大於等於0,當前數進行比較

l[j+1] = l[j]

j -= 1

# 比較完成,j=-1

l[j+1] = v

希爾排序:

因為插入排序適合比較有序的數列,所以可以提前大步子的排好序

先生成序列,按照k = 1+3k,從大到1;

然後進行插入排序,不穩定,平均複雜度o(

nd) o(n

d)

,在這裡d=1.5;最壞o(

n2) o(n

2)

def

insert_sort

(l, g):

for i in range(g, len(l)):

v = l[i]

j = i - g

while j>=0

and l[j]>v:

l[j+g] = l[j]

j -= g

l[j+g] = v

defshell_sort

(l):

gg = [1+3*k for k in range(len(l)) if

1+3*k < len(l)]

# 反序

gg.reverse()

for g in gg:

insert_sort(l, g)

補充乙個排序,不知道算不算插入排序,有點冒泡的味道

def

insert_sort

(l):

for i in range(1, len(l)):

j = i

while j>=1

and l[j]1]:

# 只要後面比前面的小,就交換

l[j], l[j-1] = l[j-1], l[j]

j -= 1

python 插入排序

coding utf 8 def insertsort list list 4,1,9,13,34,26,10,7,4 m len list 元素個數 for i in range m 對每乙個元素 min i 當前元素索引 for j in range i 1,m 遍歷後面的所有元素,尋找最小的值...

Python 插入排序

本博文示例為自己指定一定範圍,生成指定個數的隨機數,再對生成的隨機數進行排序,並記錄排序所花時間。生成指定範圍 指定個數隨機數 import random def generate point range gene size,min val,max val num list i 0 while i ...

python 插入排序

時間複雜度為o n 2 基本思想就是將無序序列插入到有序序列中。例如要將陣列arr 4,2,8,0,5,1 排序,可以將4看做是乙個有序序列 圖中用藍色標出 將 2,8,0,5,1 看做乙個無序序列。無序序列中2比4小,於是將2插入到4的左邊,此時有序序列變成了 2,4 無序序列變成了 8,0,5,...