每日python練習4 寫乙個大頂堆

2021-10-13 10:08:12 字數 2517 閱讀 7175

使用python自帶heapq模組

import heapq

import random

randomlist =

[random.randint(0,

100)

for _ in

range(10

)]#將randomlist所有數變負數,

newlist =

[-x for x in randomlist]

#借助heapq,生成負數最小數的小頂堆

heapq.heapify(newlist)

#將負數的小頂堆取反,即是大頂堆

maxheaplist =

[-x for x in newlist]

print

(maxheaplist)

##方法2:

自己寫函式,

class

heap()

:def

__init__

(self, data=

):self.data = data

defadd(self, e)

: idx =

len(self.data)

parent_idx =

(idx -1)

//2while parent_idx >=0:

if self.data[idx]

> self.data[parent_idx]

: self.data[parent_idx]

, self.data[idx]

= self.data[idx]

, self.data[parent_idx]

idx = parent_idx

parent_idx =

(idx -1)

//2else

:break

defheapify

(self,

list):

self.data =

list

n =len(self.data)

for idx in

reversed

(range

(n //2)

):# reversed:返回乙個反轉的迭代器。

#從n//2到0, 做大頂堆

self._shiftdown(self.data, n, idx)

def_shiftdown

(self, arr, n, parent_idx)

:while

2* parent_idx +

1< n:

biggest_idx =

2* parent_idx +

1#比較左右子節點大小

if biggest_idx +

1< n and arr[biggest_idx +1]

> arr[biggest_idx]

: biggest_idx +=

1#比較子節點與父節點大小

if arr[parent_idx]

>= arr[biggest_idx]

:break

#若子節點較大,交換數值和位置;將子節點變成父節點,再次向下比較

arr[parent_idx]

, arr[biggest_idx]

= arr[biggest_idx]

, arr[parent_idx]

parent_idx = biggest_idx

defheapsort

(self)

: n =

len(self.data)

self.heapify(self.data)

for i in

range

(n -1)

:#將最大數與最後一位數交換,用「n - i - 1」個數做大頂堆

self.data[n - i -1]

, self.data[0]

= self.data[0]

, self.data[n - i -1]

self._shiftdown(self.data, n - i -1,

0)defshow

(self)

:return self.data

import random

randomlist =

[random.randint(0,

100)

for _ in

range(10

)]heap1 = heap(

)heap1.heapify(randomlist)

heap1.add(random.randint(0,

100)

)print

(heap1.show())

#輸出大頂堆

heap1.heapsort(

)print

(heap1.show())

#輸出排序後數列

python寫乙個服務 Python寫乙個服務

coding utf 8 import json from urllib.parse import parse qs from wsgiref.server import make server 定義函式,引數是函式的兩個引數,都是python本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...

快速刪除乙個「大目錄」

我們在做前端開發的時候常用npm來管理包,npm會在專案目錄下生成node modules目錄,下面有海量的檔案,檔案通常都不大,但數量很多,如果你想要刪除這個目錄,那很可能就會出現下面這個畫面 耗費時間非常的長,而且很可能經過了漫長計算之後,還告訴你現在由於目錄處於被開啟狀態等原因沒法刪除,真是浪...

今天終於去了乙個大商場

來北京有半個月了,一直想去大商場裡刷點東西回來,吃夜銷或者早餐的。因為宿舍附近的都是些小小的超市,感覺東西貴,最重要的是感覺那些東西不正規,有很多快過期的,要不就是灰塵多多的,看到就不敢買。因為學習,一直想去找個大商場,去一直不敢去,因為時間總是不夠用,非常非常的不夠用,但是每天早上起的早點吧,想去...