小顶堆排序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)); } }
相关推荐
堆排序--大顶堆排序
C++实现优化冒泡排序、首/尾点快速排序、大顶堆排序,包含main函数,快速排序中需要手动输入排序元素数量和元素
建堆 堆排序 小顶堆 算法学习用,有什么好的建议欢迎告诉我呀,先谢谢大家的帮助
C++小顶堆的实现,其中用到了类模板的知识,代码附有详细注释,主函数中附上了测试代码。欢迎私信讨论!
下面小编就为大家分享一篇Java 堆排序实例(大顶堆、小顶堆),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
学生,代码资源,希望大家能有用。
用C语言开发的调整大顶堆程序,欢迎下载使用。
数据结构的堆排序,简单的大顶堆排序算法源代码
Java实现堆排序算法的代码。这是一个完整的示例,它首先构建一个大顶堆(升序排列时),然后通过交换堆顶元素和最后一个元素,并对剩余元素重新调整堆来完成排序
建立小顶排序堆~~~~~~~
数据结构的排序算法,二路归并排序、大顶堆排序实现算法
最大堆数据结构实现c++版,实现排序功能。
堆排序的c++实现,heap[]定义为泛型
文件是.Cpp 里面提供了希尔排序、快速排序、堆排序(大小顶堆)算法C++源码
=key[2i+2](小顶堆)或者:Key[i]>=Key[2i+1]&&key>=key[2i+2](大顶堆) 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆排序的思想 利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)...
将待排序序列构造成一个大顶堆 此时,整个序列的最大值就是堆顶的根节点。 将其与末尾元素进行交换,此时末尾就为最大值。 然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行...
堆排序中有两个核心的操作,一个是创建大顶堆(或者小顶堆,这里用的是大顶堆),再一个就是对堆进行调整。这里需要注意的是,并没有真正的创建堆,只是利用完全二叉树的特性,将其对应到数组的下标中(例如对于节点...
// 调整H.r[s]的关键字,使H.r[s..m]成为一个大顶堆(对其中记录的关键字而言) RcdType rc; rc=H.r[s]; for(int j=2*s;j;j*=2){ if(j(H.r[j].key,H.r[j+1].key))++j; if(!LT(rc.key,H.r[j].key))break; H.r[s]=...
本程序主要由堆来实现优先队列的数据结构,主要有优先队列的删除,插入。算法复杂度为logn
课程实验数据结果,C语言实现快排归并插入大顶堆。 内含5W-50W随机生成整数每隔5W数据量排序一次的时间记录,并对其进行了均值和方差的比较。