冒泡改進:有可能迭代到中間就已經全部有序了。如果一次遍歷元素都沒交換位置說明已經有序了,停止迭代。這裡引進了乙個計數。
def bubble_sort(l):
for i in range(len(l)):
change=0
for j in range(len(l)-i-1):
if l[j]
> l[j+1]:
l[j],l[j+1]
=l[j+1],l[j]
change+=1
if change==0:
break
return l
遞迴:
def quick_sort(l):
if len(l)
< 2: # 基線條件(停止遞迴的條件)
return l
else:
base_value = l[0]
# 選擇基準值
less
=[m for m in l[1:]
if m < base_value]
# 由所有小於基準值的元素組成的子陣列(python獨有的切片,生成器等特性)
greater =
[m for m in l[1:]
if m >= base_value]
# 由所有大於基準值的元素組成的子陣列
return quick_sort(less) + [base_value] + quick_sort(greater)
非遞迴
todo
def straight_select_sort(l):
# if l==:
# return l
for i in range(len(l)):
min=i
for j in range(i,len(l)):
if l[j]
min=j
if min!=i:
l[i] ,l[min]
=l[min],l[i]
return l
todo
def insert_sort(l):
# if len(l)<=1:
# return l
for i in range(1,len(l)):
while i>0 and l[i]
l[i],l[i-1]
=l[i-1],l[i]
i-=1
return l
def shell_sort(arr):
step=len(arr)//2
while step>0:
for i in range(step,len(arr)):
j=iwhile j>=step and arr[j]
#每個分組的遍歷
arr[j],arr[j - step]
=arr[j - step],arr[j]
j-=step
step//=2
return arr
def merge(s1,s2):
i=j=0
s=while i
if s1[i]
) i+=1
else:
) j += 1
s += s1[i:]
# 若最後s1和s2列表剩餘,則將其剩餘部分加入到s後面
s += s2[j:]
return s
def merge_sort(s):
n=len(s)
if n<=1:
return s
mid=n//2
s1=merge_sort(s[0:mid]
) s2=merge_sort(s[mid:n]
)return merge(s1,s2)
python實現十大排序演算法
平方階o n 2 插入排序 選擇排序 氣泡排序 線性對數階o nlogn 快速排序 堆排序 歸併排序 o n 1 a a介於0到1之間 希爾排序 線性階o n 基數排序 桶排序 計數排序 穩定 氣泡排序 插入排序 歸併排序 基數排序 不穩定 選擇排序 快速排序 希爾排序 堆排序 in place,不...
十大排序演算法的Python實現
author qiao 十大排序演算法的python實現 1 氣泡排序 def bubble iarray length len iarray for i in range length for j in range length i 1 if iarray j iarray j 1 tmp iar...
十大排序演算法以及python實現
排序演算法可以說是非常重要的基礎演算法。可能一般少有單獨排序的任務,但是大多任務都是基於排序演算法的。現在,對於排序演算法進行乙個總結。排序演算法可以分為兩種,第一種是比較類的,第二種是非比較類的。比較類演算法包括插入排序,選擇排序,快速排序等等方法 非比較類演算法包括計數排序,桶排序和計數排序。比...