小顶堆排序Java代码样例
import java.util.Arrays; public class MinHeapTopN { // top num private int topN; // top n number array private int[] topNHeap; /** * init * * @param topN * @param unSortedArray */ public MinHeapTopN(int topN, int[] unSortedArray) { this.topN = topN; this.topNHeap = new int[topN]; // init topN array for (int i = 0; i < topN; i++) { this.topNHeap[i] = unSortedArray[i]; } // create min heap createMinHeap(); // add new num for (int i = topN; i < unSortedArray.length; i++) { putNewNum(unSortedArray[i]); } } /** * put a new number to the min heap * * @param newNum */ private void putNewNum(int newNum) { // only great than root node need to sort if (newNum > this.topNHeap[0]) { this.topNHeap[0] = newNum; // adjust heap UpToDown(0); } } /** * create a min heap */ private void createMinHeap() { // the first no leaf node from the tail int pos = this.topN / 2; for (int i = pos; i >= 0; i--) UpToDown(i); } /** * adjust the heap * * @param i */ private void UpToDown(int i) { int leftChildIndex, rightChildIndex, tmp, pos; // the left child index leftChildIndex = 2 * i + 1; // the right child index rightChildIndex = leftChildIndex + 1; if (leftChildIndex > (this.topN - 1)) { // no child return; } else { if (rightChildIndex > (this.topN - 1)) // only have left child pos = leftChildIndex; else // get the index of great one pos = this.topNHeap[leftChildIndex] > this.topNHeap[rightChildIndex] ? rightChildIndex : leftChildIndex; if (this.topNHeap[i] > this.topNHeap[pos]) { // swap tmp = this.topNHeap[i]; this.topNHeap[i] = this.topNHeap[pos]; this.topNHeap[pos] = tmp; // continue adjust UpToDown(pos); } } } public static void main(String[] args) { int[] all = {16, 7, 3, 20, 17, 5698, 13, 120, 117, 318, 5213, 2120, 2117, 218}; MinHeapTopN mntn = new MinHeapTopN(3, all); System.out.print(Arrays.toString(mntn.topNHeap)); } }
相关推荐
堆排序--大顶堆排序 大顶堆排序是堆排序的一种,通过构建大顶堆来实现排序的过程。下面是对大顶堆排序的详细解释: 什么是大顶堆? 大顶堆是一种特殊的完全二叉树,它满足以下条件: * 对于每个非叶子节点,节点...
以下将详细讲解标题“各种排序Java代码”中涉及的几种排序方法,包括快速排序、冒泡排序、堆排序和归并排序。 1. **快速排序(Quick Sort)**: 快速排序是一种基于分治思想的高效排序算法,由C.A.R. Hoare在1960...
7. **堆排序**:基于完全二叉树的堆数据结构,通过构建大顶堆或小顶堆进行排序。堆排序在原地进行,无需额外空间,但效率低于快速排序。 8. **计数排序**:非基于比较的排序,适用于整数排序,统计每个元素出现的...
以下是对标题“各种排序的java代码归总”及描述中提到的排序算法的详细解析: 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单的排序算法,通过不断交换相邻的逆序元素来逐步排序。其主要步骤包括比较和交换...
堆排序利用了完全二叉树的特性,将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,继续此过程,直到所有元素排序完毕。Java的PriorityQueue类可以用来实现堆排序的一部分功能。 7. ...
堆排序利用了二叉堆的数据结构,将待排序序列构造成一个大顶堆或小顶堆,然后交换堆顶元素与末尾元素,缩小排序范围,重复此过程直到排序完成。其时间复杂度为O(n log n)。 7. 计数排序(Counting Sort) 计数排序...
C++实现优化冒泡排序、首/尾点快速排序、大顶堆排序,包含main函数,快速排序中需要手动输入排序元素数量和元素
在Java中,Shear Sort通常用于处理较小规模的数据,其特点是代码简洁,但效率略逊于其他高级排序算法。 2. **SortApp**:这是一个通用的排序应用类,可能包含了对不同排序算法的封装或者提供了一种通用的排序接口,...
它首先构造一个大顶堆(或小顶堆),然后将堆顶元素与末尾元素交换,再调整剩余元素为新的堆,重复这个过程直到所有元素排序完毕。 5. **实现细节**:在Java中,你可以创建一个`SortingStrategy`接口,包含一个`...
堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在本场景中,我们关注的是堆排序的源代码,它适用于openSUSE 11.4操作系统,并且是使用GCC version 4.5.1编译器编译的。在这个名为"sort...
堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在Java中,我们可以利用数组来表示堆,因为数组天然具有树形结构的特性。以下将详细介绍堆排序的原理、步骤以及Java实现。 **堆排序的...
首先构建一个大顶堆(或小顶堆),然后将堆顶元素与最后一个元素交换,接着调整剩余元素为新的堆,再将堆顶元素与最后一个元素交换,直到整个数组有序。Java实现中,可以使用PriorityQueue(优先队列)来辅助实现堆...
- 构建初始堆:将待排序序列构造成一个大顶堆或小顶堆。 - 调整堆:将堆顶元素与末尾元素交换,然后将剩余元素重新调整为堆。 - 递归过程:将堆的大小减一,重复步骤2,直到堆的大小为1,排序完成。 3. **优点**...
本资源提供了十种不同的排序算法的Java代码实现,这有助于开发者深入理解各种算法的工作原理,并在实际项目中根据需求选择合适的排序方式。 1. 冒泡排序(Bubble Sort):冒泡排序是一种简单的排序算法,通过重复...
堆排序利用了堆这种数据结构,将待排序的元素构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,再调整堆。时间复杂度为O(n log n),空间复杂度为O(1)。 八、拓扑排序 拓扑排序主要用于有向无环图(DAG)的...
本资源提供了八种经典的排序算法的Java源代码实现,包括直接插入排序、希尔排序、简单选择排序、堆排序、冒泡排序、快速排序、归并排序和基数排序。下面将对这八大排序算法进行详细介绍。 1. **直接插入排序...
堆排序利用堆这种数据结构实现排序,首先构建一个大顶堆或小顶堆,然后将堆顶元素与最后一个元素交换,再调整堆,重复这个过程直到排序完成。时间复杂度始终为O(n log n)。Java实现如下(未给出,需自行实现)。 8....