代码整理:
使指定根节点的树最大化:
/**
* Make tree max.
*
* @param array
* - source array
* @param i
* - root node index.
* @param length
* - tree length.
*/
private static void maxHeapify(int[] array, int i, int length) {
int left = i * 2;
int right = i * 2 + 1;
int largest;
if (left < length && array[left] > array[i]) {
largest = left;
} else {
largest = i;
}
if (right < length && array[right] > array[largest]) {
largest = right;
}
if (largest != i) {
swap(array, largest, i);
maxHeapify(array, largest, length);
}
}
/**
* Swap two elements in array.
*
* @param array
* - source array.
* @param j
* @param i
*/
private static void swap(int[] array, int j, int i) {
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
构建最大树:
/**
* Build max heap tree.
*
* @param array
* - source array.
*/
private static void buildMaxHeap(int[] array) {
int length = array.length;
for (int index = length / 2 + 1; index >= 0; index--) {
maxHeapify(array, index, length);
}
}
排序函数:(升序)
/**
* Heap sort in ASC.
*
* @param array
* - source array
*/
public static void heapSort(int[] array) {
buildMaxHeap(array);
int length = array.length;
for (int index = length - 1; index > 0; index--) {
swap(array, index, 0);
length--;
maxHeapify(array, 0, length);
}
}
分享到:
相关推荐
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
5. **堆排序**:利用堆这种数据结构实现排序,分为建堆和调整堆两步。C#中,可以使用System.Collections.Generic.PriorityQueue类辅助实现。堆排序在最坏、最好和平均情况下的时间复杂度都是O(n log n)。 6. **二路...
而`std::sort`函数则可以用来实现插入排序和堆排序,尽管内部实现可能有所不同,但其效率通常都很高。 为了比较这三种排序算法的运行时间,`运行时间比较.cpp`文件很可能是包含测试代码的源文件。代码可能会通过...
本主题涵盖了六种经典的排序算法:希尔排序、堆排序、快速排序、简单选择排序、插入排序和冒泡排序。这些算法各有特点,适用于不同的场景,下面将逐一详细介绍。 1. **希尔排序**:希尔排序是由Donald Shell提出的...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
排序思维导图整理,插入排序、希尔排序、冒泡排序、选择排序、快速排序、堆排序、归并排序、基数排序,本思维导图整理了各排序方法的定义、时间复杂度、空间复杂度、稳定性,后期会整理出各排序方法对应的实现demo...
本文将详细探讨十种经典的排序算法在C++中的实现,分别是冒泡排序、桶排序、计数排序、堆排序、插入排序、合并排序、快速排序、基数排序、选择排序和希尔排序。 1. **冒泡排序**:冒泡排序是最简单的排序算法之一,...
本资源提供了五种常见的排序算法的C++实现,包括插入排序、选择排序、归并排序、冒泡排序和堆排序。这些算法都是基于《算法导论》一书中的伪代码编写的。下面将详细解释这五种排序算法及其C++实现的关键点。 1. ...
这里提到的"数据结构,选择,插入,冒泡,快排,堆排序c++实现代码"是指使用C++编程语言实现的六种经典的排序算法。下面我们将逐一探讨这些排序算法及其C++实现的关键点。 1. **选择排序(Selection Sort)** - 选择...
Java中可以使用`PriorityQueue`类实现堆排序。 4. **快速排序(Quick Sort)**: 快速排序是效率较高的排序算法,基于“分而治之”的策略。选择一个基准值,将数组分为两部分,一部分所有元素都小于基准,另一部分...
5. **堆排序**:利用二叉堆结构实现的排序算法。可以看作是一种优先队列的操作。堆排序在最坏、最好和平均情况下都为O(n log n),且是原地排序,不需要额外的存储空间。 6. **冒泡排序**:最简单的排序算法之一,...
本文将深入探讨标题和描述中提及的几种排序算法:直接插入排序、希尔排序(SHELL排序)、冒泡排序、快速排序、简单选择排序、堆排序以及归并排序,并对它们进行分析和比较。 1. **直接插入排序**: - 直接插入排序...
这里我们主要探讨五种排序算法:直接插入排序、堆排序、归并排序和快速排序,它们都是针对字符串元素进行排序的。这四种算法在C语言中都有实现,并且适用于随机生成的长度在1到16之间的字符串。 1. 直接插入排序: ...
本资源包"选择排序 冒泡排序 插入排序 快速排序 堆排序.zip"聚焦于五种经典的排序算法,包括选择排序、冒泡排序、插入排序、快速排序以及堆排序。这些算法的实现语言是Objective-C,这是一种强大的面向对象的编程...
这里,我们重点讨论的是使用 C 语言实现的几种经典排序算法,包括直接插入排序、冒泡排序、直接选择排序、希尔排序、快速排序以及堆排序。 1. **直接插入排序**:是最简单的排序算法之一,它的工作原理类似于我们在...
堆排序通过构建最大堆,然后将堆顶元素与末尾元素交换并调整堆,重复此过程实现排序。时间复杂度稳定在O(n log n)。 6. **归并排序**: 归并排序也是一种分治算法。它将序列分为两个子序列,分别进行排序,然后...
在本文中,我们将深入探讨Java编程中的三种基本排序算法:冒泡排序、插入排序和堆排序。这些排序算法是计算机科学中的基础知识,尤其对于初学者来说,理解和实现它们至关重要。我们将详细讲解每种排序算法的工作原理...
堆排序是一种基于比较的排序算法,它使用了一种特殊的树形数据结构——堆,通常是一个完全二叉树。 **原理**: - 首先将无序数组构建成一个大顶堆或小顶堆。 - 然后不断取出堆顶元素(即最大或最小的元素),将其...
1 使用随机算法生成100个随机数 2 使用各种排序算法进行排序。如冒泡 快速 直接插入 选择 归并 堆排序 shell排序等 3 打印出各个排序算法排序后的结果
"排序算法整理.zip"这个压缩包文件显然包含了关于十种常见排序算法的详细资料,这些算法包括冒泡排序、选择排序、插入排序、计数排序、基数排序、堆排序、归并排序、快速排序、桶排序以及希尔排序。下面我们将逐一...