堆排序,一種全新的排序方式,運用了完全二叉樹存資料。
假設根是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#includeusing
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就是根節點,沒有子樹的都是葉子節點,如圖中...