堆排序(完全二叉樹)

2022-08-23 18:00:13 字數 735 閱讀 7069

堆排序,一種全新的排序方式,運用了完全二叉樹存資料。

假設根是u,那麼左兒子就是u*2,右兒子是u*2+1.

用一維陣列手擼乙個堆排序。

1,如何插入乙個數。heap[++size] = x; up(size);

2,求集合中的最小值。heap[1];

3,刪除最小值。heap[1] = heap[size];size--;down(1);

4,刪除任意值。heap[k] = heap[size];size--;down(k);up(k);

5,修改任意乙個值。heap[k] = x; down(k);up(k);

那麼堆基本性質是什麼呢

小根堆。。也就是說每乙個點都是小於等於他的左右兒子的,那麼我們可以發現啊,他的根就是這個堆的最小值。

儲存方式:陣列1就是根節點,然後左右兒子往下遍歷。

有倆個騷操作,down和up。。

down就是把1個節點往下移動,up就是把乙個節點往上移動。

#include#include

using

namespace

std;

const

int n = 100010

;int

n,m;

inth[n],cnt;

void down(intu)}

intmain()

puts(

"");

return0;

}

二叉樹,完全二叉樹,滿二叉樹,二叉排序樹

二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。完全二叉樹 除最後一層外,每一層上的結點數均達到最大值 在最後一層上只缺少右邊的若干結點 樹中所含的n個節點和滿二叉樹中編號...

二叉樹之堆排序

堆排序,首先要對堆的性質有了解,分大頂堆和小頂堆,我這次寫的是大頂堆,即父節點大於其子節點,在把堆無序後,從堆頂開始遍歷,得到大堆頂,把堆頂與最後乙個元素對換,這時,最後乙個元素就是最大值,這時,就不用考慮最後乙個元素了,開始迴圈。重新開始從頭遍歷,詳細過程寫在 裡,大家參考 此排序主要有2個難點,...

二叉樹與堆排序

樹與二叉樹簡介 樹是一種資料結構,比如目錄結構,樹是一種可以遞迴定義的資料結構 樹是由n個節點組成的集合,如果n 0,那麼這是一顆空樹,如果n 0,那存在乙個節點作為樹的根節點,其他節點可以分為m個子樹,每個子樹本身又是一棵樹 一些概念 根節點 葉子節點 a就是根節點,沒有子樹的都是葉子節點,如圖中...