Python的幾個常見的排序演算法

2021-09-10 06:28:57 字數 1829 閱讀 6682

思路:

(1) n=len(li)

(2) 內迴圈 j j+1 比較 if li[j]>li[j+1] 交換位置

(3) 外迴圈 range(n-1)

def sortbuble(li):

n=len(li)

for i in range(n-1):

for j in range(n-1-i):

if li[j]>li[j+1]:

li[j],li[j+1]=li[j+1],li[j]

print(li)

# print(li)

return li

sortbuble([23,-8,26,-2,-6,-18,33])

時間複雜度:o(n^2) 最佳的時候可以達到o(n)

穩定性: 穩定的排序

思路:(1)n=len(li)

(2)內迴圈

min_index=i for range(i+1,n) 比較 if li[i] < li[min_index] min_index=i

(3)外迴圈

range(n-1)

def sortchoose(li):

n=len(li)

for i in range(n-1):

min_index=i

for j in range(i+1,n):

if li[j]時間複雜度 o(n^2)

穩定性 不穩定排序

(1)n=len(li)

(2) 內迴圈

第0個元素是排好隊,

將第1個元素拿出來插入好隊伍

temp=li[1]

判斷:if temp=0:

li[j + 1] = li[j]

j-=1

li[j+1]=temp

print(li)

時間複雜度:o(n^2) 最優o(n)

穩定性:穩定排序

def shell(li,increment):

n=len(li)

for inc in increment:# 對增量列表

for k in range(inc):# 分幾個組

for i in range(inc+k,n,inc):

# i 是要插入的元素的位置

# i=1

temp=li[i]

j=i-inc

while temp=0:

li[j + inc] = li[j]

j-=inc

li[j+inc]=temp

print(li)

li=[3,-2,5,10,-9,11,7,-1]

increment=[3,2,1]

shell(li,increment)

時間複雜度: o(n^2)

穩定性: 不穩定

def quick1(li):

n=len(li)

if len(li)<=1:

return li

else:

mid=0

small=

bigger=

for i in range(1,n):

if li[mid]>li[i]:

else:

return quick1(small) + [li[mid]] +quick1(bigger)

li=[3,-2,5,10,-9,11,7,-1,7]

print(quick1(li))

時間複雜度: o(n^2) 最好o(nlogn)

穩定:取決於演算法。

C語言常見的幾個排序

include stdio.h void insersoft int ch,int len 插入排序 for j i 1 j low j ch low temp void selectsoft int ch,int len 選擇排序 void maopaosoft int ch,int len 氣泡...

python快速排序的原理 理解快速排序演算法

快速排序的時間複雜度為o nlogn 空間複雜度為o n 根據 張小牛 的文章快速排序 quick sort 詳解,證明最優的排序演算法,其時間複雜度可為o nlogn 對應的空間複雜度可為o n 快速排序可實現理論最優效率,這可能是快速排序比較重要的原因吧。我們基於python學習寫一下快速排序吧...

python的幾種常見排序方法

簡單交換排序 n int input 請輸入需要排序的資料個數 x for i in range n for i in range n 1 for j in range i 1,n if x i x j x i x j x j x i 每次符合結果的都進行資料交換 print 排序後的資料 x 氣泡...