一、氣泡排序
def bububle_sort(alist):
"""氣泡排序(穩定|n^2m)"""
n = len(alist)
for j in range(n-1):
count = 0
for i in range(0,n-1-j):
if alist[i]>alist[i+1]:
count +=1
alist[i], alist[i+1] = alist[i+1], alist[i]
if count==0:
return
二、選擇排序
def select_sort(alist):
"""選擇排序(不穩定|n^2)"""
n = len(alist)
for j in range(n-1):
min_index = j
for i in range(j+1,n):
if alist[min_index] > alist[i]:
min_index = i
alist[j], alist[min_index] = alist[min_index], alist[j]
三、插入排序
def insert_sort(alist):
"""插入排序(穩定|n^2)"""
n = len(alist)
for j in range(1,n):
i = j
while i>0:
if alist[i] < alist[i-1]:
alist[i], alist[i-1] = alist[i-1], alist[i]
i -= 1
else:
break
四、希爾排序
def shell_sort(alist):
"""希爾排序(不穩定|n^2)"""
n = len(alist)
gapwww.cppcns.com = n//2
while gap>=1:
for j in range(gap,n):
i=jwhile i>0:
if alist[i]
五、快速排序
def quick_sor程式設計客棧t(alist, first, last):
"""快速排序(不穩定|n^2)"""
if first >= last:
return
mid_value = alist[first]
low = first
high = last
while low < high:
#high左移
while low = mid_value:
high -= 1
alist[low] = alist[high]
#low右移
while low < high and alist[low] < mid_value:
low += 1
alist[high] =alist[low]
#從迴圈退出時,low=high
alist[low] = mid_value
www.cppcns.com
#對low左邊的列表執行快速排序
quick_ first, low-1)
#對low右邊的列表執行快速排序
quick_sort(alist, low+1, last)
六、歸併排序
def程式設計客棧 merge_sort(alist):
"""歸併排序(穩定|nlgn)"""
n = len(alist)
if n <= 1:
return alist
mid = n//2
#left 採用歸併排序後形成新的有序列表
left_li = merge_sort(alist[:mid])
#right 採用歸併排序後形成新的有序列表
right_li = merge_sort(alist[mid:])
#merge(left, right) 將兩個有序的子串行合併為乙個新的整體
left_pointer, right_pointer = 0, 0
result =
while left_pointer < len(left_li) and right_pointer
本文標題: python實現排序演算法解析
本文位址:
排序演算法 快速排序解析及Python實現
1.1 分而治之 divide and conquer 一種遞迴式方法 1.2 找出基線條件,這種條件必須盡可能簡單 1.3 不斷將問題分解為簡單問題,直到問題滿足極基線條件 假設陣列的長度為0 7這8個數字,且亂序排序,並且每次取正中間的值作為基線值 basevalue 那麼可結合二分查詢的思想可...
排序演算法python實現
先列出一些演算法複雜度的識別符號號的意思,最常用的是o,表示演算法的上屆,如 2n2 o n2 而且有可能是漸進緊確的,意思是g n 乘上乙個常數係數是可以等於f n 的,就是所謂的a b。而o的區別就是非漸進緊確的,如2n o n2 o n2 確實可以作為2n的上屆,不過比較大,就是所謂的a其他符...
python排序演算法實現
coding utf 8 氣泡排序 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大 公升序 就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步...