From 6f3be968a614b727bad5757e93b1a7cfca8c1e58 Mon Sep 17 00:00:00 2001 From: fu08 <1007702646@qq.com> Date: Tue, 15 Dec 2020 20:09:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HeapSortMax.class | Bin 0 -> 954 bytes HeapSortMax.java | 64 +++++++++++++++++++++++++++ "\350\257\276\344\273\266/Heap.java" | 30 +++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 HeapSortMax.class create mode 100644 HeapSortMax.java create mode 100644 "\350\257\276\344\273\266/Heap.java" diff --git a/HeapSortMax.class b/HeapSortMax.class new file mode 100644 index 0000000000000000000000000000000000000000..6a265073a1ec0daec6fef6152d598535165ff271 GIT binary patch literal 954 zcmZvb+fEZv6o&uZIklz8a2NzT11KKaA+|wGQK27TdOABmbxw)}wON4E)+$5<{>I45x4w zBgdy(QCQ92X*T`69U4Xr=7#kRfnjObk!jO+)~Rt0X#;i&4#orqPw^2jwxw&ePLRz1 z5}l$aQaFzb%&qymvS>zhTwsv`>b=H#AkeoM)`N$w+G@~z?5|e2qSpM7s$@G&R-m^W z`D@RX{OxXjvfOAj*Mj?@JZwsvolb9alA8c=-j@8SV2h!1oaB?kS#Z|eFAyIY2wdbS zw*dtST*76>GIg0prNlK;|CX#Mrs-8wbJVM7rr}j|bHb|_rtVeZX2M&X+K2H8y_^O= zWAsFKfErSL5(cgiX_^iR*`2P(2kslpc%s>x>Pm^Dwo*{-g65>(!gQUSYiYT6(4B&2 zsazUxEw#I5SSlAa`weW@&J}dmmbo4WOZVKgrR`%}g2dVd7SPLhh$zF1Mqnb1ao7YI z#|$Pg%d8@czsvF$i0UEB223#ml28tLpF#|c5uPt|7yc#TWqBp{Kwa0W^Xa1fiqP(X zP3sr2qxVNY arr[max]) {//如果左侧叶子节点大于max则将最大位置换成leftNode并且递归需要限定范围为数组长度, + max = leftNode;//将最大位置改为左子节点 + } + + if(rightNode < size && arr[rightNode] > arr[max]) {//如果左侧叶子节点大于max则将最大位置换成rightNode + max = rightNode;//将最大位置改为右子节点 + } + + //如果不相等就需要交换 + if(max != index) { + int tem = arr[index]; + arr[index] = arr[max]; + arr[max] = tem; + //如果下边还有叶子节点并且破坏了原有的堆。需要重新调整 + maxHeap(arr, size, max);//位置为刚才改动的位置; + } + } + + /** + * 需要将最大的顶部与最后一个交换 + * @param arr + */ + public static void heapSort(int arr[]) { + int start = (arr.length - 1)/2;//开始位置最后一个非叶子节点,最后一个叶子节点的父节点 + for(int i = start; i>=0; i--) { + maxHeap(arr, arr.length, i); + } + + //最后一个跟第一个进行调整 + for(int i = arr.length-1; i>0; i--) {//因为数组从零开始的,所以最后一个是数组长度减一 + int temp = arr[0];//最前面的一个 + arr[0] = arr[i];//最后一个 + arr[i] = temp; + //调整后再进行大顶堆调整 + maxHeap(arr, i, 0); + } + } +} \ No newline at end of file diff --git "a/\350\257\276\344\273\266/Heap.java" "b/\350\257\276\344\273\266/Heap.java" new file mode 100644 index 0000000..dd6535a --- /dev/null +++ "b/\350\257\276\344\273\266/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