`
shifulong
  • 浏览: 59187 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

排序篇:heap

阅读更多
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;
}

 

分享到:
评论

相关推荐

    C经典算法之排序法 - 改良的选择排序

    本篇将探讨一种改良的选择排序方法——堆排序。 #### 选择排序的基本原理 选择排序的基本步骤如下: 1. 从未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2. 再从剩余未排序元素中继续寻找最小(大)...

    Java排序小结:常用的排序方法

    本篇文章将详细解析Java中常见的排序方法,结合"javaeye 收集的java排序小结"资料,旨在帮助读者理解和掌握这些排序算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,通过重复遍历数组,比较...

    算法学习笔记

    - Heap Sort(堆排序):将数组构建为一个最大堆,然后逐个将堆顶元素(最大值)与数组末尾元素交换。 - Bucket Sort(桶排序):将数组分到有限数量的桶里,每个桶再分别排序。 - Counting Sort(计数排序):对...

    内部排序小结 包括几乎所有的内部排序算法

    本篇内容主要总结了多种内部排序算法,包括它们的特点、效率以及适用场景。 1. 选择排序(Selection Sort):不稳定排序,平均时间复杂度为O(n^2)。它通过反复遍历待排序的数据,每次找到最小(或最大)的元素,...

    基于MFC的各种排序程序

    本篇文章将深入探讨在MFC环境中实现的四种基本排序算法:冒泡排序、希尔排序、堆排序和选择排序。 1. **冒泡排序(Bubble Sort)** 冒泡排序是最基础的排序算法之一,它的基本思想是通过重复遍历待排序的序列,比较...

    用javascript实现的十大排序算法详解

    本篇文章将深入探讨如何使用JavaScript实现十大经典排序算法,帮助开发者更好地理解和运用这些算法。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序方法,通过重复遍历待排序的数组,比较相邻元素并交换...

    数据结构 各种排序所需时间的比较

    本篇文章将详细探讨Vc++环境下几种常见排序算法的时间复杂度,帮助你理解不同排序算法在性能上的差异。 首先,我们来介绍几种基础的排序算法: 1. 冒泡排序(Bubble Sort):冒泡排序是一种简单的排序算法,它重复...

    给定N个不同的整数,要求对这N个整数按如下规则排序并输出

    对于大规模且无特定顺序的数据,快速排序(Quick Sort)、归并排序(Merge Sort)或堆排序(Heap Sort)等更高效的方法可能更为适用。 1. 插入排序:这是一种简单直观的排序算法,它的工作原理是通过构建有序序列,...

    基于python的排序算法实现

    本篇文章将详细讲解基于Python实现的七种常见排序算法:快速排序、插入排序、选择排序、希尔排序、冒泡排序、堆排序以及合并排序。 1. 快速排序(Quick Sort) 快速排序是一种分治策略的排序算法,由C.A.R. Hoare在...

    【排序结构5】 基于比较的内部排序总结

    本篇主要探讨基于比较的内部排序方法,即通过比较元素之间的关系来确定排序顺序。这些排序算法广泛应用于各种场景,如数据库、数据分析和算法竞赛。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,...

    Java ArrayList实现的快排,归并排序,堆排序

    本篇将重点讲解如何利用ArrayList实现快速排序(Quick Sort)、归并排序(Merge Sort)和堆排序(Heap Sort)这三种经典的排序算法,并探讨它们的原理、优缺点以及在实际应用中的选择。 **快速排序(Quick Sort)**...

    深入分析各排序算法

    标题 "深入分析各排序算法" 暗示了这篇内容主要关注的是计算机科学中的排序算法,这是一门非常基础但至关重要的技术。排序算法是数据结构与算法领域的一个重要组成部分,用于将一组数据按照特定顺序排列。在实际的...

    排序算法性能分析

    本篇文章将详细分析八种常见的排序算法,探讨它们的执行效率,以及关键语句的执行次数。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,通过不断交换相邻的逆序元素实现排序。其平均时间复杂度为O(n...

    最经典的8大排序算法总结

    在本篇总结中,将探讨8种经典的排序算法,分别是冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、二叉树排序和基数排序。 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的排序算法。它重复地遍历要...

    java数组排序

    本篇将详细探讨几种常见的排序算法及其在Java中的实现。 首先,让我们从最简单的排序算法——冒泡排序开始。冒泡排序是一种直观的排序方法,通过重复遍历数组,每次比较相邻两个元素并根据需要交换它们的位置,使得...

    数据结构排序算法的比较

    本篇文章将通过具体的实验来对比几种经典的排序算法:插入排序、起泡排序、选择排序、快速排序、堆排序以及归并排序。实验将利用随机函数产生30000个随机整数,并采用这些排序算法对数据进行排序,同时记录每种算法...

    七种常见的VB排序算法示例程序

    本篇将深入探讨七种常见的VB排序算法示例程序,它们包括:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序和希尔排序。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,通过不断交换相邻...

    .net 实现常用经典排序算法

    本篇将详细讲解希尔排序、堆排序和快速排序这三种经典的排序算法,并讨论它们的实现细节、性能特点以及适用场景。 1. **希尔排序(Shell Sort)**: 希尔排序是一种基于插入排序的改进算法,通过设置间隔序列(也...

    8种常用排序方法java类实现

    本篇文章将详细探讨标题为“8种常用排序方法Java类实现”的主题,主要基于描述中的内容,即8种业务中常见的排序方法在Java语言中的实现。 1. **冒泡排序(Bubble Sort)**:冒泡排序是一种简单直观的排序算法,通过...

    STM8S003单片机数组10种排序方法分析比较

    数组排序是常见的数据处理任务,本篇文章将对在STM8S003上实现的10种排序方法进行分析和比较。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法,通过不断交换相邻的不正确顺序元素来达到排序目的。它的...

Global site tag (gtag.js) - Google Analytics