python 排序演算法

2021-10-01 05:35:13 字數 2618 閱讀 5678

# 氣泡排序

def bubble_sort(arr):

for i in range(0, len(arr)):

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

if arr[j] > arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]

return arr

# 選擇排序

def selection_sort(arr):

for i in range(0, len(arr)):

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

if arr[i] > arr[j]:

arr[i], arr[j] = arr[j], arr[i]

return arr

# 插入排序

def insert_sort(arr):

for i in range(1,len(arr)):

for j in range(0,i):

if arr[j] > arr[i]:

arr[j], arr[i] = arr[i], arr[j]

return arr

# 快速排序

def quick_sort(arr):

"""快速排序"""

if len(arr) < 2:

return arr

# 選取基準,隨便選哪個都可以,選中間的便於理解

mid = arr[len(arr) // 2]

# 定義基準值左右兩個數列

left, right = ,

# 從原始陣列中移除基準值

arr.remove(mid)

for item in arr:

# 大於基準值放右邊

if item >= mid:

else:

# 小於基準值放左邊

# 使用迭代進行比較

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

# 歸併排序

def merge_sort(arr):

if len(arr)<2:

return arr

mid = len(arr)//2

left = merge_sort(arr[:mid])

right = merge_sort(arr[mid:])

return merge(left,right)

def merge(left,right):

result =

while len(left)>0 and len(right)>0:

if left[0]<=right[0]:

else:

result += left

result += right

return result

def heapify(arr, n, i):

largest = i

left = 2 * i + 1

right = 2 * i + 2

if left < n and arr[i] < arr[left]:

largest = left

if right < n and arr[largest] < arr[right]:

largest = right

if largest != i:

arr[i],arr[largest] = arr[largest],arr[i] # 交換

heapify(arr, n, largest)

def heap_sort(arr):

n = len(arr)

# build a maxheap.

for i in range(n, -1, -1):

heapify(arr, n, i)

# 乙個個交換元素

for i in range(n-1, 0, -1):

arr[i], arr[0] = arr[0], arr[i] # 交換

heapify(arr, i, 0)

if __name__ == '__main__':

arr = [3,2,6,12,1,7,5,11,9,8,10,4]

print('氣泡排序:',bubble_sort(arr))

arr = [3,2,6,12,1,7,5,11,9,8,10,4]

print('選擇排序:',selection_sort(arr))

arr = [3,2,6,12,1,7,5,11,9,8,10,4]

print('插入排序:',insert_sort(arr))

arr = [3,2,6,12,1,7,5,11,9,8,10,4]

print('快速排序:',quick_sort(arr))

arr = [3,2,6,12,1,7,5,11,9,8,10,4]

print('歸併排序:',merge_sort(arr))

arr = [3,2,6,12,1,7,5,11,9,8,10,4]

print('堆排序: ',merge_sort(arr))

排序演算法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...