思路:
(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 氣泡...