From 0b4f8ea1c2c2eb759ac8e65722994ca35ba8f2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=B8=E7=9A=93=E6=A5=A0?= <1026609323@qq.com> Date: Fri, 8 Jan 2021 13:42:02 +0800 Subject: [PATCH] push --- "\344\275\234\344\270\232/Heap.java" | 78 ++++++++++++++++++++++++ "\344\275\234\344\270\232/MainTest.java" | 59 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 "\344\275\234\344\270\232/Heap.java" create mode 100644 "\344\275\234\344\270\232/MainTest.java" diff --git "a/\344\275\234\344\270\232/Heap.java" "b/\344\275\234\344\270\232/Heap.java" new file mode 100644 index 0000000..7b33443 --- /dev/null +++ "b/\344\275\234\344\270\232/Heap.java" @@ -0,0 +1,78 @@ +package datastruct.heap; + +import java.util.Arrays; + +public class Heap { + + private Integer[] head; + + public Heap(int length) { + this.head = new Integer[length]; + } + + public void insert(int data) { + System.out.println("插入:"+ data); + for (int i = 0;i < this.head.length;i++) { + if (this.head[i] == null) { + if (i == 0) { + this.head[0] = data; + return; + } + this.head[i] = data; + for (int j = i;j > 0; j = (j-1)/2) { + if (data < this.head[(j-1)/2]) { + this.head[j] = this.head[(j-1)/2]; + this.head[(j-1)/2] = data; + } + } + break; + } + } + } + + public Integer deleteMin() { + if (this.head[0] == null) { + System.out.println("堆不存在元素"); + return null; + } + int tempNone = 0; + int tempLast = 0; + int result = this.head[0]; + for (int i = 1;i < this.head.length;i++) { + if (this.head[i] == null || this.head[this.head.length-1] != null) { + i--; + if (this.head[this.head.length-1] != null) { + i = this.head.length-1; + } + tempLast = i; +// System.out.println("最后的索引:"+tempLast); + this.head[0] = null; + for (int j = 1; j < i; j = j * 2 + 1){ + if (this.head[j+1] == null) { + this.head[(j-1)/2] = this.head[j]; + this.head[j] = null; + return result; + } + if (this.head[j] > this.head[j+1]) { + this.head[(j-1)/2] = this.head[j+1]; + this.head[j+1] = null; + j = j + 1; + }else { + this.head[(j-1)/2] = this.head[j]; + this.head[j] = null; + } + tempNone = j; + } + this.head[tempNone] = this.head[tempLast]; + this.head[tempLast] = null; +// System.out.println("最后的空穴:"+tempNone); + return result; + } + } + return result; + } + + public void print() { + System.out.println(Arrays.toString(this.head)); + } +} diff --git "a/\344\275\234\344\270\232/MainTest.java" "b/\344\275\234\344\270\232/MainTest.java" new file mode 100644 index 0000000..2099512 --- /dev/null +++ "b/\344\275\234\344\270\232/MainTest.java" @@ -0,0 +1,59 @@ +package datastruct.heap; + +import java.util.Arrays; + +public class MainTest { + public static void main(String[] args) { +// Heap heap = new Heap(10); +// heap.insert(9); +// heap.insert(8); +// heap.insert(7); +// heap.insert(6); +// heap.insert(2); +// heap.insert(4); +// heap.insert(5); +// heap.insert(0); +// heap.insert(1); +// heap.insert(3); +// heap.print(); +// System.out.println("第一次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第二次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第三次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第四次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第五次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第六次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第七次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第八次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第九次删除"); +// heap.deleteMin(); +// heap.print(); +// System.out.println("第十次删除"); +// heap.deleteMin(); +// heap.print(); + int[] tar = {4,2,6,3,8,7,5}; + Heap sort = new Heap(tar.length); + for (int i : tar) { + sort.insert(i); + } + for (int i = 0; i < tar.length;i++) { + tar[i] = sort.deleteMin(); + } + System.out.println(Arrays.toString(tar)); + } +} -- Gitee