日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构之堆的插入、取值、排序(细致讲解+图片演示)

發布時間:2025/6/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之堆的插入、取值、排序(细致讲解+图片演示) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據結構之堆(Heap):插入、取值、排序。

堆是一種數據結構,分為最小堆和最大堆,可以用二叉樹來表示。

在二叉樹的任意的一個三角結構中(一個父節點,兩個子節點),需要滿足以下兩個條件:

1、父節點要是最小的,就是最小堆(或最大的,就是最大堆),兩個子節點之間沒有要求

2、數據插入的順序是一層一層的,只有上一層存滿,才會有下一層

?

下面我們以圖片的形式演示最小堆的插入、取值、和排序操作,只要知道最小堆的原理,那么最大堆也就明白了。

?

假設我們有一個原始的最小堆如下:

?

?

插入操作:

當插入一個新值時,首先將值放到樹的最后的位置,如下圖所示。

然后將這個值與父元素比較,如果不滿足規則1,則與父元素替換(如下圖所示)。

?第一步

第二步

第三步

?

由圖可知,在插入操作中,交換次數最大即為樹的高度(log n

?

最小值操作:

在最小堆中,拿出一個最小值,當然就是拿出第一個數啦~不過拿完以后樹不就沒有“頭”了?

不用擔心,我們可以把最后一個數放到頭的位置,這樣樹的結構就不會改變,而且操作簡單(因為是最后一個數)。

當然,因為是最后一個數,必然會出現不滿足條件1的情況,所以我們需要把新的樹頭與子元素比較替換,下面是圖片演示:

假設我們有一個原始的最小堆如下所示,接下來我們要取最小值:

?

不過交換完很可能是不滿足條件1的,那么我們就需要比較替換,替換規則是和兩個子元素中最小的一個替換

由圖可知,在取值操作中,交換次數最大也為樹的高度(log n

?

堆的排序:

我們知道了如何取最小值,那么堆的排序簡單啦~只要依次取堆的最小值,那么當堆取完時,我們取出的數據不就是一個從小到大的序列嘛!

轉載于:https://www.cnblogs.com/chenkeyu/p/7505637.html

總結

以上是生活随笔為你收集整理的数据结构之堆的插入、取值、排序(细致讲解+图片演示)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。