From 8b8c66e45faf6b0471847663015b5c466a30a2ae Mon Sep 17 00:00:00 2001 From: zan Date: Wed, 9 Dec 2020 08:02:09 +0800 Subject: [PATCH 1/3] [add] template code --- Heap.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Heap.java diff --git a/Heap.java b/Heap.java new file mode 100644 index 0000000..dd6535a --- /dev/null +++ b/Heap.java @@ -0,0 +1,30 @@ + +public class Heap>{ + public T[] heap; + public int SIZE; + public int count; + + Heap(int size){ + SIZE = size; + // reference: https://stackoverflow.com/questions/34827626/cannot-be-cast-to-ljava-lang-comparable + heap = (T[])new Comparable[SIZE]; + count = 0; + } + + + public void add (T item){ + if(count >= SIZE){ + // throw new Exception("Heap Overflow"); + System.out.println("Heap Full"); + return; + } + + } + + public void delete(T item){ + + } + + public void print(){ + } +} \ No newline at end of file -- Gitee From c204d9d38d1a1887c5e56f027814d045f97d96dc Mon Sep 17 00:00:00 2001 From: zan Date: Wed, 9 Dec 2020 08:06:55 +0800 Subject: [PATCH 2/3] update README.md. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e931f2f..9dd8882 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ### 基础 -1. 实现⼀个小顶堆或者⼤顶堆 +1. 实现小顶堆或者大顶堆 - (1) 定义堆的数据结构 - (2) 实现入堆函数 - (3) 实现出堆函数 @@ -20,7 +20,7 @@ ### 进阶 1. 利用优先级队列合并K个有序数组 -2. 求⼀组动态数据集合的最⼤Top K +2. 求一组动态数据集合的Top K ## 工作流程 -- Gitee From 56ce77dd8b05bc1e9cb778a4ed70f5a952c6fe25 Mon Sep 17 00:00:00 2001 From: cjh123581369 <18259247855> Date: Tue, 15 Dec 2020 18:47:31 +0800 Subject: [PATCH 3/3] 4 --- Heap.class | Bin 0 -> 2191 bytes Heap.java | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++--- Main.class | Bin 0 -> 594 bytes Main.java | 18 ++++++++++++ 4 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 Heap.class create mode 100644 Main.class create mode 100644 Main.java diff --git a/Heap.class b/Heap.class new file mode 100644 index 0000000000000000000000000000000000000000..f3a0f7267ab207e77b8cd42965b681a19ebccf24 GIT binary patch literal 2191 zcmaJ>QBxCF6#i~@lO5mXF8q(+4bAzDEy7LXd$0@|`9I}jU^OiXI~-ap|? z$4-6W#Ru)wFm0z!pZng2{)hg6cE)PIv%5B-LpzzAd-vXRzwey$oqK2YI)ba1iE!opR%o~;v)LA0m*o!(%tf#tlVavuupr|N zF^l5%p_rRuGGdm*+%j<6z#RpB)3M76-K%r=?a%Cyf?eDgnJR6S?TWo#a3&POnfyl4 zuGT6JomZEZxTI%hSFS3kS%qM>R4Y~$LaBT)Urlo_K0A1u!&E891N-OlMQ5S5weD1w z1W!S;b2){c_}+AKv@KJ$v!Bk}W&cDdPEy%uEjyKLsbE)~TZ~wL@K6E|#%Eo^V7Zc) zK(x5HhH_59sgmw+d~k0jIXUQN)AkSSbm?KyM`UW|Vx`2bMZ4k%aO=&f&3qwu+b-mp zfJ?i=)w$-?(3SkghEq{Urk2LX_ash{Gd+=R+PkrS-^o^4)<~vQt7M&-ywoXtjk=r> zO-vleh>2t9Q|R1FBoh{5Ci>B5;3E^uU|jC;V>7iv!N97CySQg!2q#Q@j89CQ#xUiJ zm^g!b)V=|lsj`Y2S87bushC)UO~0^A)=gxQGjR^*OJXZ1QLnw5cmn&&(L2Wn9yDz z^qdX~1GI+_qzyrbfiQpFh>)(8yQdH*kU-vN5CVCYKp_G92IjXgI$G)oKj(K))`v2} z6WT!}vCL6l^JxMu%~8Sw`v}~QgE)Xr+M~1s=)yY;VvxJcw9`*AK|c1QpVH^t(&;b~ zeT?C#o(mQxg*BQKYbC!&YXIrkR|sumUm|MNVOpu}H@`}f9{T_j19}K@gy}_@pv4-- zShZdZs_HtmX29Z5Fd&q$93-gi2chuXz$VMIMC5i$H6)} z>HVdqw%`2LNYGR9G+G#~MVe8LDHc}B+J?YubQsW;`hyFK%V&LIS1G&*drsK3wXP;Eb6p_ zL(A!}nYtCDWUrqO{JHs&=q9fSL?a7c0BJLBVK*~J=|)n{2xbTmF^{!}gYI#n*5T41MiCFqVn2LX5l37<^WJjAce4 zO*tUa?7k2dmqJg_7JCdM>Sh^j1n5=QW@Xpen^|5p$0Z0ud&TCztV9Oy!5OEX@|F4< Dk>8BV literal 0 HcmV?d00001 diff --git a/Heap.java b/Heap.java index dd6535a..6a43552 100644 --- a/Heap.java +++ b/Heap.java @@ -1,4 +1,3 @@ - public class Heap>{ public T[] heap; public int SIZE; @@ -11,20 +10,96 @@ public class Heap>{ count = 0; } - public void add (T item){ if(count >= SIZE){ // throw new Exception("Heap Overflow"); System.out.println("Heap Full"); return; } + heap[count]=item; + percolateUp(count); + count++; + } +private void percolateUp(int count) { + while(count>0){ + int j = (count - 1) / 2; + int arr=heap[count].compareTo(heap[j]); + if(arr<0){ + break; + } + swap(count, j); + count = j; + } } - public void delete(T item){ - + public void swap(int i, int j){ + T temp = heap[i]; + heap[i] = heap[j]; + heap[j] = temp; } + public void print(){ + System.out.print("\n"); + for (T i:heap){ + System.out.print(i+"\t"); + } + } + + +public T delete(){ + + T tempmax = heap[0]; + + heap[0] = heap[--count]; + + percolateDown(count, 0); + + heap[count] = null; + return tempmax; + +} + +private int percolateDown(int count, int i) { + + int j; + while(i != (j = ProperParent(count, i))){ + swap(i, j); + + i = j; + } + return i; + +} + +private int ProperParent(int count, int i) { + return RChildValid(count, i) ? Bigger(Bigger(i, i * 2 + 1), i * 2 + 2) : + LChildValid(count, i) ? Bigger(i, i * 2 + 1) : i; +} + +public boolean RChildValid(int n, int i){ + if(i * 2 + 2 < n){ + return true; } + return false; +} + +public boolean LChildValid(int n, int i){ + if(i * 2 + 1 < n){ + return true; + } + return false; +} + +public int Bigger(int i, int j){ + + int arr=heap[i].compareTo(heap[j]); + if(j < count){ + return arr>0 ? i : j; + } + return i; +} + + } \ No newline at end of file diff --git a/Main.class b/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..8b42cffed5c4e8f1b0987633a52aecc2f0d696c1 GIT binary patch literal 594 zcmYk2+fKqj5QhJ4OBZU@f+xiDDJhc3g~l6aDoF1DP%YnENED?u!Lo$R#eEUu*#9+SYt5HJl_k? z8FV*)&tR0hP027{^?Z5V?=)m^CmL<47#-pH49o6w^-T;!u`T>o@iq)Rzg1F=)@`>R zyvR#WnNu|~A1R*=3p3PxB}Gr^b&d@io7l3kjU5}in6a^keX^(?24`}6z40brLOO9P z>V@>=q~eFNB?AUN5beIKzbddweu^x1lxQx|Y%;96Q-|elrzZk6SA?GE(G>KK*_3S= z5`Na5zG})%%t>0T`ZW4!G%(ntHYhX7iNg`t2MLB*ie^-#eP9mrq?Pp@der><4eimf zM$oGT{S(FziGmqtClw1L&dE6Qu^}@SOR*TjEDXUPD3}v~(+EQ+QUe*n$$`_hlPD0< bF;z=6!3AN}$ah1C_i*rpG@&|#sv-Rk<2-I8 literal 0 HcmV?d00001 diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..0fd25fe --- /dev/null +++ b/Main.java @@ -0,0 +1,18 @@ +class Main { + public static void main(String[] args){ + Heap heap = new Heap(10); + heap.add(0); + + heap.add(3); + heap.add(9); + heap.add(1); + heap.add(5); + heap.add(4); + heap.add(18); + heap.add(21); + heap.print(); + + heap.delete(); + heap.print(); + } +} \ No newline at end of file -- Gitee