Heapsort ゞ 浴缸里的玫瑰 2022-06-02 03:48 130阅读 0赞 堆排序:堆排序就是利用堆这种数据结构的性质来对数组进行排序,在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的性质可知,最大的值一定在堆顶。堆排序一种不稳定的排序算法,其时间复杂度为O(nlogn) 算法思想 (1)构建最大堆; (2)选择顶,并与第0位置元素交换; (3)由于步骤(2)的的交换可能破环了最大堆的性质,即第0位置的元素不再是最大元素,则需要调用maxHeap调整堆(沉降法),根据实际情况重复步骤(2)。 堆排序中最重要的算法就是maxHeap,该函数假设一个元素的两个子节点都满足最大堆的性质(即左、右子树都是最大堆),只有根元素可能违反最大堆性质,那么把该元素以及左右子节点的最大元素找出来,如果该元素已经最大,那么整棵树都是最大堆,程序退出,否则交换根元素与最大元素的位置,继续调用maxHeap构建最大元素所在的子树。 package sort; /** * Created by long.chen on 2017/12/29. */ public class HeapSort<T extends Comparable<T>> { /** * 最大堆 * * @param array * @param start * @param end */ public void maxHeap(T[] array, int start, int end) { int left = 2 * start + 1; T temp = array[start]; while (left < end) { if (left + 1 < end && array[left].compareTo(array[left + 1]) < 0) left++; if (array[start].compareTo(array[left]) < 0) { array[start] = array[left]; start = left; array[start] = temp; left = 2 * left + 1; } else { break; } } } /** * @param array */ public void sortHeap(T[] array) { //(array.length-1)/ 2; 最后一个拥有孩子的节点 for (int i = (array.length - 1) / 2; i >= 0; i--) { maxHeap(array, i, array.length); } for (int i = array.length - 1; i > 0; i--) { T tmp = array[i]; array[i] = array[0]; array[0] = tmp; maxHeap(array, 0, i); } } public static void main(String[] args) { HeapSort<Integer> heapSort = new HeapSort<>(); Integer[] array = {49, 38, 65, 97, 76, 13, 27, 49}; heapSort.sortHeap(array); for (int i : array) { System.out.print(i + " "); } } }
相关 堆排序(heapsort) 堆排序(heapsort) Heap Sort 1. Complete Binary Tree 2. parent > children heapify n = 布满荆棘的人生/ 2023年10月09日 10:32/ 0 赞/ 52 阅读
相关 算法-排序算法:堆排序(HeapSort )【O(nlogn)】 MyArray.java / 数组 @author @version 2018/8/4 / publ 阳光穿透心脏的1/2处/ 2023年10月04日 12:30/ 0 赞/ 24 阅读
相关 JavaScript实现heapsort堆排序算法(附完整源码) JavaScript实现heapsort堆排序算法(附完整源码) Heap.js完整源代码 MinHeap.js完整源代码 Comparator.js完 蔚落/ 2022年09月07日 09:55/ 0 赞/ 190 阅读
相关 【数据结构】中的堆(HeapSort)排序 堆排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序利用了大根堆(或小根堆)堆顶记录的关键 男娘i/ 2022年06月16日 11:44/ 0 赞/ 216 阅读
相关 堆(heapsort)的有关概念 关于堆的一些基本概念 1. 堆:你可以把他看成是一个数组,近似的看成一个完全的二叉树,从二叉树顶端开始,从上到下,从左到右,按这个顺序的值组成了数组里的值。 2. 最 刺骨的言语ヽ痛彻心扉/ 2022年06月09日 04:25/ 0 赞/ 215 阅读
相关 Heapsort 堆排序:堆排序就是利用堆这种数据结构的性质来对数组进行排序,在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的性质可知,最大的值一定在堆顶。堆排序一种不稳定的排序算法 ゞ 浴缸里的玫瑰/ 2022年06月02日 03:48/ 0 赞/ 131 阅读
相关 排序算法7:堆排序(HeapSort) 排序算法7:堆排序(HeapSort) 文章目录 排序算法7:堆排序(HeapSort) 前言 1. 算法步骤 2. 动图演示 2、实 淩亂°似流年/ 2021年09月28日 22:38/ 0 赞/ 383 阅读
相关 选择排序之堆排序(HeapSort) [图解排序算法(三)之堆排序][Link 1] 一、堆定义 (二叉)堆是一个数组,类似于完全二叉树。分为两种形式: ![这里写图片描述][2016092622414 谁借莪1个温暖的怀抱¢/ 2021年06月10日 20:41/ 0 赞/ 489 阅读
还没有评论,来说两句吧...