python常用演算法

2022-07-18 04:36:11 字數 3992 閱讀 2568

排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有:插入排序、希爾排序、選擇排序、氣泡排序、歸併排序、快速排序、堆排序、基數排序等。用一張圖概括:

# 改進1

def bubble_sort1(origin_items,comp=lambda x, y: x > y):

items = origin_items[:]

for i in range(len(items) - 1):

for j in range(i, len(items) - 1 - i):

if comp(items[j], items[j + 1]):

items[j], items[j + 1] = items[j + 1], items[j]

break

# 改進版2

def bubble_sort2(origin_items, comp=lambda x, y: x > y):

"""高質量氣泡排序(攪拌排序)"""

items = origin_items[:]

for i in range(len(items) - 1):

for j in range(i, len(items) - 1 - i): # 從左向右排序

if comp(items[j], items[j + 1]):

items[j], items[j + 1] = items[j + 1], items[j]

for j in range(len(items) - 2 - i, i, -1): # 從右向左排序

"""簡單選擇排序"""

歸併排序(merge sort)是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。
作為一種典型的分而治之思想的演算法應用,歸併排序的實現由兩種方法:

分治法:

!(

def merge_sort(items, comp=lambda x, y: x <= y):

"""歸併排序(分治法)"""

if len(items) < 2:

return items[:]

mid = len(items) // 2

left = merge_sort(items[:mid], comp)

right = merge_sort(items[mid:], comp)

return merge(left, right, comp)

def merge(items1, items2, comp):

"""合併(將兩個有序的列表合併成乙個有序的列表)"""

items =

index1, index2 = 0, 0

while index1 < len(items1) and index2 < len(items2):

if comp(items1[index1], items2[index2]):

index1 += 1

else:

index2 += 1

items += items1[index1:]

items += items2[index2:]

return items

快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為較小和較大的2個子序列,然後遞迴地排序兩個子串行。步驟為:

# 快速排序 - 選擇樞軸對元素進行劃分,左邊都比樞軸小右邊都比樞軸大

def quick_sort(origin_items, comp=lambda x, y: x <= y):

items = origin_items[:]

_quick_sort(items, 0, len(items) - 1, comp)

return items

def _quick_sort(items, start, end, comp):

if start < end:

pos = _partition(items, start, end, comp)

_quick_sort(items, start, pos - 1, comp)

_quick_sort(items, pos + 1, end, comp)

def _partition(items, start, end, comp):

pivot = items[end]

i = start - 1

for j in range(start, end):

if comp(items[j], pivot):

i += 1

items[i], items[j] = items[j], items[i]

items[i + 1], items[end] = items[end], items[i + 1]

return i + 1

Python 常用演算法

百錢百雞 公雞5元乙隻,母雞3元乙隻,小雞1元三隻 用100元買100隻雞,問公雞 母雞 小雞各多少只 for x in range 20 for y in range 33 z 100 x y if5 x 3 y z 3 100and z 3 0 print x,y,z 五人分魚 abcde五人在...

python 常用演算法練習

toc python 常用演算法練習 1.斐波那契數列 2.九九乘法表 3.else 學習更新 1.斐波那契數列 斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的...

python 常用排序演算法

常用的排序演算法 氣泡排序,插入排序,歸併排序,快速排序 基數排序 堆排序,直接選擇排序。常用的查詢演算法 順序查詢,二分查詢,雜湊表查詢和二叉樹查詢 其中我們應該重點掌握二分查詢 歸併排序和快速排序,保證能隨時正確 完整地寫出它們的 同時對其他的查詢和排序必須能準確說出它們的特點 對其平均時間複雜...