iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
佛心分享-刷題不只是刷題

刷題筆記系列 第 15

[Day15] Patterns: Top K Numbers (中篇)- 學會蹲馬步是Heap Sort

  • 分享至 

  • xImage
  •  

Top K Numbers介紹大綱:

《上篇》

  • 介紹Binary Heap(二元堆積)的結構與特性
  • Binary Heap與陣列的關係

《中篇》

  • Binary Heap種類
  • Heap Sort: 了解什麼是heapify,以及heapify如何利用binary heap實現陣列排序

《下篇》
-Top K Numbers Pattern介紹與應用題型

昨天介紹了Binary Heap,今天要來看看如何使用Binary Heap對陣列進行排序。

首先,我們要知道Binary Heap(二元堆積)分為兩種(如下圖):

  1. max-heap(最大堆積): parent > child
    就是在heap頂端的數字為所有陣列中最大值,由上往下排序,數字從最大開始遞減。
  2. min-heap(最小堆積): child > parent
    反之,就是max-heap排序方式的相反,最小的數字在最頂端。
    https://ithelp.ithome.com.tw/upload/images/20240827/201686675G07F88LkW.png

了解max-heap跟min-heap,可以知道heap是利用資料結構進行資料排序方式。
所謂的排序,就是讓無序的Binary Tree,經過Heap Sort後,變成max-heap 或是 min-heap,這個過程稱為"Heapify"。

假設給定一個未排序的陣列(如下圖左側),而陣列對應的heap結構(如下圖右側)
https://ithelp.ithome.com.tw/upload/images/20240827/201686679wAmFNOneq.png

Heap Sort執行步驟如下:
步驟一. 根據陣列中的元素,建立一個max-heap(最大堆積)
(或 min-heap(最小堆積),這邊先以max-heap(最大堆積)進行舉例)
https://ithelp.ithome.com.tw/upload/images/20240827/20168667mAf1au8rwk.png

步驟2. max-heap排序好後,移除最大的數字,也就是root(根節點),並把移除的數字放進sorted array中。
https://ithelp.ithome.com.tw/upload/images/20240827/20168667kSXmrXA69k.png

在重新heapify的過程中,已經被移除的根節點(root)數字9,在陣列中不會再移動。
https://ithelp.ithome.com.tw/upload/images/20240827/20168667tvisGKMAPw.png
重複以上步驟,直到heap中所有的node都被放進sorted array後,就完成heap sort囉!

Reference:


上一篇
[Day14] Patterns: Top K Numbers (上篇)- 起手式是認識Binary Heap
下一篇
[Day16] Patterns: Top K Numbers (下篇)- 降龍十八掌才是Top K Numbers
系列文
刷題筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言