十大排序演算法python實現

2021-10-21 20:54:51 字數 2333 閱讀 7617

冒泡改進:有可能迭代到中間就已經全部有序了。如果一次遍歷元素都沒交換位置說明已經有序了,停止迭代。這裡引進了乙個計數。

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實現

排序演算法可以說是非常重要的基礎演算法。可能一般少有單獨排序的任務,但是大多任務都是基於排序演算法的。現在,對於排序演算法進行乙個總結。排序演算法可以分為兩種,第一種是比較類的,第二種是非比較類的。比較類演算法包括插入排序,選擇排序,快速排序等等方法 非比較類演算法包括計數排序,桶排序和計數排序。比...