public static void heapSort() { int[] arr = {0, 5, 6, 333, 5, 8, 999, 7, 7, 5, 45, 3}; int heapSize = arr.length - 1;//堆的大小, buildHeap(arr, heapSize);//建堆,递归调用maxHeapify System.out.println(Arrays.toString(arr)); for (int i = arr.length - 1; i > 0; i--) { // 堆从index=1开始建立,方便操作 swap(arr, 1, i); //每一次把第一个元素(最大)放到堆的最后一个节点,所以每一次堆的大小减一 heapSize--; maxHeapify(arr, 1, heapSize); } System.out.println(Arrays.toString(arr)); } private static void maxHeapify(int[] arr, int index, int heapSize) { int leftIndex = index << 1; int rightIndex = leftIndex + 1; int largestIndex = index; if (leftIndex <= heapSize && arr[leftIndex] > arr[index]) { largestIndex = leftIndex; } if (rightIndex <= heapSize && arr[rightIndex] > arr[largestIndex]) { largestIndex = rightIndex; } if (largestIndex != index) { swap(arr, index, largestIndex); maxHeapify(arr, largestIndex, heapSize); } } private static void buildHeap(int[] arr, int heapSize) { //(arr.length/2)从非叶子节点处开始遍历 for (int i = arr.length / 2; i > 0; i--) { maxHeapify(arr, i, heapSize); } } public static void swap(int arr[], int j, int i) { int tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; }
相关推荐
本篇将探讨一种改良的选择排序方法——堆排序。 #### 选择排序的基本原理 选择排序的基本步骤如下: 1. 从未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2. 再从剩余未排序元素中继续寻找最小(大)...
本篇文章将详细解析Java中常见的排序方法,结合"javaeye 收集的java排序小结"资料,旨在帮助读者理解和掌握这些排序算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,通过重复遍历数组,比较...
- Heap Sort(堆排序):将数组构建为一个最大堆,然后逐个将堆顶元素(最大值)与数组末尾元素交换。 - Bucket Sort(桶排序):将数组分到有限数量的桶里,每个桶再分别排序。 - Counting Sort(计数排序):对...
本篇内容主要总结了多种内部排序算法,包括它们的特点、效率以及适用场景。 1. 选择排序(Selection Sort):不稳定排序,平均时间复杂度为O(n^2)。它通过反复遍历待排序的数据,每次找到最小(或最大)的元素,...
本篇文章将深入探讨在MFC环境中实现的四种基本排序算法:冒泡排序、希尔排序、堆排序和选择排序。 1. **冒泡排序(Bubble Sort)** 冒泡排序是最基础的排序算法之一,它的基本思想是通过重复遍历待排序的序列,比较...
本篇文章将深入探讨如何使用JavaScript实现十大经典排序算法,帮助开发者更好地理解和运用这些算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序方法,通过重复遍历待排序的数组,比较相邻元素并交换...
本篇文章将详细探讨Vc++环境下几种常见排序算法的时间复杂度,帮助你理解不同排序算法在性能上的差异。 首先,我们来介绍几种基础的排序算法: 1. 冒泡排序(Bubble Sort):冒泡排序是一种简单的排序算法,它重复...
对于大规模且无特定顺序的数据,快速排序(Quick Sort)、归并排序(Merge Sort)或堆排序(Heap Sort)等更高效的方法可能更为适用。 1. 插入排序:这是一种简单直观的排序算法,它的工作原理是通过构建有序序列,...
本篇文章将详细讲解基于Python实现的七种常见排序算法:快速排序、插入排序、选择排序、希尔排序、冒泡排序、堆排序以及合并排序。 1. 快速排序(Quick Sort) 快速排序是一种分治策略的排序算法,由C.A.R. Hoare在...
本篇主要探讨基于比较的内部排序方法,即通过比较元素之间的关系来确定排序顺序。这些排序算法广泛应用于各种场景,如数据库、数据分析和算法竞赛。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,...
本篇将重点讲解如何利用ArrayList实现快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)这三种经典的排序算法,并探讨它们的原理、优缺点以及在实际应用中的选择。 **快速排序(Quick Sort)**...
标题 "深入分析各排序算法" 暗示了这篇内容主要关注的是计算机科学中的排序算法,这是一门非常基础但至关重要的技术。排序算法是数据结构与算法领域的一个重要组成部分,用于将一组数据按照特定顺序排列。在实际的...
本篇文章将详细分析八种常见的排序算法,探讨它们的执行效率,以及关键语句的执行次数。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,通过不断交换相邻的逆序元素实现排序。其平均时间复杂度为O(n...
在本篇总结中,将探讨8种经典的排序算法,分别是冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、二叉树排序和基数排序。 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的排序算法。它重复地遍历要...
本篇将详细探讨几种常见的排序算法及其在Java中的实现。 首先,让我们从最简单的排序算法——冒泡排序开始。冒泡排序是一种直观的排序方法,通过重复遍历数组,每次比较相邻两个元素并根据需要交换它们的位置,使得...
本篇文章将通过具体的实验来对比几种经典的排序算法:插入排序、起泡排序、选择排序、快速排序、堆排序以及归并排序。实验将利用随机函数产生30000个随机整数,并采用这些排序算法对数据进行排序,同时记录每种算法...
本篇将深入探讨七种常见的VB排序算法示例程序,它们包括:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序和希尔排序。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,通过不断交换相邻...
本篇将详细讲解希尔排序、堆排序和快速排序这三种经典的排序算法,并讨论它们的实现细节、性能特点以及适用场景。 1. **希尔排序(Shell Sort)**: 希尔排序是一种基于插入排序的改进算法,通过设置间隔序列(也...
本篇文章将详细探讨标题为“8种常用排序方法Java类实现”的主题,主要基于描述中的内容,即8种业务中常见的排序方法在Java语言中的实现。 1. **冒泡排序(Bubble Sort)**:冒泡排序是一种简单直观的排序算法,通过...
数组排序是常见的数据处理任务,本篇文章将对在STM8S003上实现的10种排序方法进行分析和比较。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法,通过不断交换相邻的不正确顺序元素来达到排序目的。它的...