Python 排序演算法

2021-09-19 07:00:58 字數 3165 閱讀 5442

lst = [4, 3, 6, 9, 2, 1]
1、氣泡排序: 依次把最大的數字往後移動

def bubble_sort(lst):

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

for j in range(len(lst) - 1 - i):

if lst[j + 1] < lst[j]:

lst[j + 1], lst[j] = lst[j], lst[j + 1]

return lst

print(bubble_sort(lst))

2、選擇排序: 把最小的元素放到最前面

def select_sort(lst):

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

minindex = i

for j in range(i + 1, len(lst)):

if lst[j] < lst[minindex]:

minindex = j

lst[i], lst[minindex] = lst[minindex], lst[i]

return lst

print(select_sort(lst))

3、 插入排序:把需要插入的數字插入到已經排好序的正確位置。

def insert_sort(lst):

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

cur, preindex = lst[i + 1], i

while preindex >= 0 and cur < lst[preindex]:

lst[preindex + 1] = lst[preindex]

preindex -= 1

lst[preindex + 1] = cur

return lst

print(insert_sort(lst))

4、希爾排序:一種更高效的插入排序,它與插入排序的不同之處在於,它會優先比較距離較遠的元素。

def shell_sort(lst):

l = len(lst)

gap = 1

while gap < l // 3:

gap = gap * 3 + 1

while gap > 0:

for i in range(gap, len(lst)):

cur, preindex = lst[i], i - gap

while preindex >= 0 and cur < lst[preindex]:

lst[preindex + gap] = lst[preindex]

preindex -= gap

lst[preindex + gap] = cur

gap //= 3

return lst

print(shell_sort(lst))

5、計數排序:開闢乙個新的空間,然後把它的陣列值當做鍵,陣列中的元素為該值出現的次數。

def counter_sort(lst):

bucket = [0] * (max(lst) + 1)

for l in lst:

bucket[l] += 1

i = 0

for j in range(len(bucket)):

while bucket[j] > 0:

bucket[j] -= 1

lst[i] = j

i += 1

return lst

print(counter_sort(lst))

6、 快速排序:取乙個中心點,把比它大的放一邊,小的放另一邊

def quick_sort(lst):

if len(lst) <= 1:

return lst

p = lst[0]

left = [lst[i] for i in range(1, len(lst)) if lst[i] < p]

right = [lst[i] for i in range(1, len(lst)) if lst[i] >= p]

return quick_sort(left) + [p] + quick_sort(right)

print(quick_sort(lst))

7、 歸併排序:同時從兩個陣列中取值,然後合併到乙個新的陣列中。

def merge_sort(lst):

if len(lst) <= 1:

return lst

def merge(left, right):

res =

i = j = 0

while i < len(left) and j < len(right):

if left[i] < right[j]:

i += 1

else:

j += 1

return res + left[i:] + right[j:]

mid = len(lst) // 2

left = merge_sort(lst[:mid])

right = merge_sort(lst[mid:])

return merge(left, right)

print(merge_sort(lst))

8、二分查詢:取陣列中間的值和查詢的值作比較,從而判斷需要查詢的元素在中間值的哪個方位。

def binary_search(lst,left,right, num):

if right num:

right = mid - 1

else:

return mid

return binary_search(lst,left,right,num)

print(binary_search(lst, 1,len(lst),11))

參考:

排序演算法Python

廢話不說直接看 計數排序 def countsort datalist 最終排好序的陣列 b 0 len datalist 計算用來儲存計數的陣列c的長度 maxnum max datalist minnum min datalist clength maxnum minnum 1 c 0 clen...

排序演算法 python

author xcy 參考別人,盡量自己寫了 命名規則不太好,不建議用list命名,但不好改了。寫的過程中遇到的問題都寫在注釋中 以下方法都在pycharm中除錯過,python3.7,但測試用例不多,難免有錯誤望批評指正 剛發現shell排序 有問題,網上的部落格都是照搬的啊,錯的也搬。還有歸併和...

Python 排序演算法

python 排序演算法 持續更新ing 內建排序 氣泡排序 0 n 2 插入排序 選擇排序 希爾排序 堆排排序 快排排序 歸併排序 呼叫方法預設排序 a 9,5,8,7,4,3,1,6,2,0 a.sort print a 呼叫方法預設排序 a 9,5,8,7,4,3,1,6,2,0 b sort...