堆是乙個完全二叉樹,用js實現堆

2021-10-04 03:47:15 字數 2637 閱讀 9799

堆和堆排序:為什麼說堆排序沒有快速排序快?

堆排序互動資料次數比快排的多

堆:

/*

* @author: hotsuitor

* @date: 2020-03-19 16:01:22

* @lasteditors: hs

* @lastedittime: 2020-03-19 22:44:45

* @description: [email protected]

*/// 堆

const heap =

[undefined,33,

27,21,

16,13,

15,9,

5,6,

7,8,

1,2]

;class

heap

// 根節點索引=1,左子節點=2*i,右子節點=2*i+1, i=層數

insert

(data)

if(len ===0)

this

.heaparray.

push

(data)

;let currentindex =

this

.heaparray.length -1;

let i;

// 層數,從0開始

let parentindex;

//! 奇數->跟、右節點,偶數->左節點

parentindex = currentindex %2?

(currentindex -1)

/2: currentindex /2;

// 父節點的索引

// 自下往上堆化

while

( parentindex >0&&

this

.heaparray[currentindex]

>

this

.heaparray[parentindex])}

// 刪除堆頂元素

deletetop

(data)

}scan()

swap

(arr, i, j)

}class

heap2

// 建堆

static

buildheap

(arr)

return arr;

}static

heapify

(arr, n, i)

}insert

(data)

}static

deletetop

(arr)

return result;

}scan()

static

swap

(arr, i, j)

swap

(arr, i, j)

// 堆排序

static

sort

(arr)

return result;}}

// let heap2 = new heap(heap);

// heap2.insert(22);

// heap2.insert(23);

// console.log(heap2.scan());

// heap2.deletetop();

// heap2.deletetop();

// console.log(heap2.scan());

// let heap3 = new heap(, 5);

// heap3.insert(23);

// heap3.insert(27);

// heap3.insert(33);

// heap3.insert(45);

// heap3.insert(22);

// console.log(heap3.scan());

// heap3.deletetop();

// console.log(heap3.scan());

// let heap4 = new heap2(5);

// heap4.insert(33);

// heap4.insert(23);

// heap4.insert(45);

// heap4.insert(22);

// heap4.insert(7);

// console.log(heap4.scan());

let arr1 =[,

3,44,

23,18,

39,26,

77];let arr2 =

[...arr1]

;let arr1heap = heap2.

buildheap

(arr2)

;console.

log(

"arr1"

, arr1)

;console.

log(

"arr1heap"

, arr1heap)

;console.

log(

"heapsort"

, heap2.

sort

(arr1heap)

);

二叉堆(完全二叉樹)

最小堆的實現 最小堆是一顆完全二叉樹 這裡用陣列實現完全二叉樹 index 0 1 2 3 4 5 6 value 空 a b c d 任意index,其父親為index 2,左兒子為2 index,右兒子為2 index 1 時間複雜度 o logn include includeusing na...

二叉堆 完全二叉樹 優先佇列

完全二叉樹的邏輯結構是樹結構,但由於其特殊性,資料結構中常用陣列來儲存.訪問父節點,左子結點,右子節點都很方便 陣列儲存以1為起點 假設有某一結點u a u 2 為其父節點,當且僅當u 1 a u 2 為其左子結點,當且僅當u 2 n a u 2 1 為其右子節點,當且僅當u 2 1 n inclu...

完全二叉樹 堆 紅黑樹

完全二叉樹 對於乙個樹高為h的二叉樹,如果其第0層至第h 1層的節點都滿。如果最下面一層節點不滿,則所有的節點在左邊的連續排列,空位都在右邊。這樣的二叉樹就是一棵完全二叉樹。定義 堆樹是一顆完全二叉樹 堆樹中某個節點的值總是不大於或不小於其孩子節點的值 堆樹中每個節點的子樹都是堆樹。當父節點的鍵值總...