小黑演算法成長日記23 堆排序

2021-10-24 22:09:24 字數 946 閱讀 6553

arr =

[2,5,4,2,1,22,4,5,3,87,3,22]

def adjustheap(arr,length,i): # 調整新新增arr[i]元素後,繼續調整為大根堆

temp = arr[i]

# 將arr[i]存入temp

k = 2*i + 1 # 從孩子中進行搜尋

while k < length:

if k+1 < length and arr[k+1]

> arr[k]: # 將k指向孩子中較大的結點

k += 1

if arr[k]

> temp: # 孩子結點中最大的元素比arr[i]大的話,將孩子結點向上拋

arr[i]

= arr[k]

i = k

else: # 孩子結點最大的元素比arr[i]小,則為大根堆,不必調整

break

k = 2*k + 1 # 繼續向下搜尋

arr[i]

= temp

def sort_arr(arr):

n = len(arr)

for i in range(int(n/2)-1,-1,-1): # 從下至上依次遍歷所以葉子結點,最終調整為大根堆

adjustheap(arr,n,i)

for j in range(n-1,0,-1): # 從後至前依次將陣列元素arr[k]與arr[0]進行交換,並將[0,k-1]調整為大根堆

arr[0],arr[j]

= arr[j],arr[0]

adjustheap(arr,j,0)

return arr

sort_arr(arr)

執行結果:

[1, 2, 2, 3, 3, 4, 4, 5, 5, 22, 22, 87]

小黑演算法成長日記3 矩陣最優乘法順序

p 30 35,15 5,10 20,25 def function p n len p 1 m 0 n 1 for i in range n 1 動態規劃最優乘法次數記錄表 s 0 n 1 for i in range n 1 矩陣劃分位置記錄表 for r in range 1 n 對角線垂直方...

小黑演算法成長日記1 遞迴選擇排序,全排列,二分查詢

1.遞迴選擇排序 遞迴選擇排序 defselectsort arr,i if i len arr 1 遞迴出口 return else 子問題處理 min arr i temp i for j in range i 1 len arr if arr j min 計算子問題最小值 min arr j ...

小黑演算法成長日記5 最大段和問題及其推廣

1.簡單暴力窮舉法 窮舉法 defmaxsum arr n len arr max 0 besti 1 bestj 1 for i in range n 遍歷序列開頭指標 sum 0for j in range i,n 遍歷序列結尾指標 sum arr j ifsum max max sum bes...