import java.util.Random;
public class HeapSort {
/**
* @param args
*/
public static void main(String[] args) {
HeapSort hs = new HeapSort();
int[] b = { 4, 7, 10, 564, 1, 8, 1, 1, 9, 4, 1, 46, 2, 96 };
int[] c = new int[10000000];//out of memory .......
Random r = new Random();
for (int i = 0; i < c.length; i++) {
c[i] = r.nextInt(10000000);
}
BTree tree = new BTree();
long start = System.currentTimeMillis();
tree.sort(c);
long end = System.currentTimeMillis();
System.out.println("HeapSort a array with lenght of " + c.length
+ " in " + (end - start) + " millisecond");
}
private static class BTree {
private static class Node {
public int leftChild;
public int rightChild;
public int data;
public Node(int newData) {
leftChild = -1;
rightChild = -1;
data = newData;
}
}
private Node[] buildTree(int[] array) {
Node[] nodeList = new Node[array.length];
for (int i = 0; i < array.length; i++) {
Node node = new Node(array[i]);
nodeList[i] = node;
}
for (int i = 0; i < nodeList.length; i++) {
Node node = nodeList[i];
if ((2 * i + 1) > nodeList.length - 1) {
break;
} else {
node.leftChild = 2 * i + 1;
}
if ((2 * i + 2) > nodeList.length - 1) {
break;
} else {
node.rightChild = 2 * i + 2;
}
}
return nodeList;
}
private void buildmaxHeap(Node[] bTree, int toBeSored) {
for (int i = bTree.length / 2; i >= 0; i--) {
maxHeap(bTree, i, toBeSored);
}
}
private int[] sort(int[] array) {
Node[] bTree = buildTree(array);
int toBeSored = array.length;
buildmaxHeap(bTree, toBeSored);
for (int i = toBeSored; i >= 2; i--) {
exchangeValue(bTree[0], bTree[toBeSored - 1]);
toBeSored--;
maxHeap(bTree, 0, toBeSored);
}
int[] sortedArray = new int[array.length];
for (int i = 0; i < bTree.length; i++) {
sortedArray[i] = bTree[i].data;
}
return sortedArray;
}
private void maxHeap(Node[] btree, int index, int toBeSored) {
BTree.Node node = btree[index];
BTree.Node lNode = null;
BTree.Node rNode = null;
int largest = index;
int lChild = node.leftChild;
if (lChild != -1) {
lNode = btree[lChild];
}
int rChild = node.rightChild;
if (rChild != -1) {
rNode = btree[rChild];
}
if (lChild != -1 && lChild < toBeSored
&& lNode.data > btree[largest].data) {
largest = lChild;
}
if (rChild != -1 && rChild < toBeSored
&& rNode.data > btree[largest].data) {
largest = rChild;
}
if (index != largest) {
exchangeValue(btree[largest], node);
maxHeap(btree, largest, toBeSored);
}
}
private void exchangeValue(BTree.Node a, BTree.Node b) {
int temp = a.data;
a.data = b.data;
b.data = temp;
}
}
}
分享到:
相关推荐
heap Sort. In briefly, it had been done with java.
堆排序(Heap Sort)是一种基于比较的排序算法,它的核心思想是利用二叉堆的数据结构特性来实现排序。本文将详细介绍堆排序的实现步骤、重要概念以及相关操作。 首先,我们要理解什么是堆。堆是一种特殊的树形数据...
it is a source code of heap sort ,so the number of words enough?
堆排序 堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法
标题中的“test_heap_sort.rar_heap”表明这是一个关于堆排序(Heap Sort)的程序实现,使用了VC++(Visual C++)编程语言。堆排序是一种基于比较的排序算法,它的核心思想是利用二叉堆的数据结构来对数组进行排序。...
AlgorithmMan by Iori,AlgorithmMan是使用Winform技术开发的一套用于算法演示的工具。 HeapSort为AlgorithmMan中的堆排序演示工具(这是可执行文件;需要.net 4.0支持;非源代码)。 原文:C#算法设计排序篇之06-堆...
它的主要思想是将待排序的序列构造成一个大顶堆(或小顶堆),此时,整个序列的最大值(或最小值)就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值(或最小值)。然后将剩余n-1个元素重新构造成一个...
堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在C#中实现堆排序,我们可以分为两个主要步骤:建堆和调整堆。这里,我们将深入探讨堆排序的基本原理、C#实现的细节以及其在实际应用中的...
本文实例讲述了PHP排序算法之堆排序(Heap Sort)。分享给大家供大家参考,具体如下: 算法引进: 在这里我直接引用《大话数据结构》里面的开头: 在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的...
插入排序(Insertion Sort)是一种简单直观的比较排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用...
- **堆排序(Heap Sort)**:利用二叉堆结构进行排序,时间复杂度为O(n log n)。 2. **在C语言中实现排序函数:** 实现这些排序算法时,你需要定义一个函数,接受一个指针数组和长度作为参数。例如,你可以创建一...
堆排序(Heap Sort) 插入排序(Insertion Sort) 引入排序(Intro Sort) 迭代归并排序(Iterative Merge Sort) 归并插入排序(Merge Insertion Sort) 归并排序(Merge Sort) 最高有效数字优先的基数排序(Msd ...
heap-sort code
堆排序的主算法(Heap-Sort)首先将原始数组构建为最大堆,然后将堆顶元素(当前最大值)与末尾元素交换,这样末尾就得到了排序后的最大值。接着,对剩下的元素重新调整为最大堆,再将堆顶元素与末尾交换,如此反复...
6. **堆排序(Heap Sort)**:利用堆这种数据结构实现的排序方法,效率较高,常用于大数据集。 7. **计数排序(Counting Sort)、桶排序(Bucket Sort)、基数排序(Radix Sort)**:这些是针对特定类型数据(如...
6. **堆排序(Heap Sort)**:利用堆这种数据结构所设计的一种排序算法,能在O(n log n)的时间复杂度内完成排序。 7. **计数排序(Counting Sort)**:非基于比较的排序算法,适用于整数排序,尤其在数据范围不大的...
经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - 奇偶排序Odd-even sort 经典排序算法 - 梳排序Comb sort 经典排序算法 - 耐心排序Patience Sorting 经典排序算法 - 珠...
1. 冒泡排序(Bubble Sort) def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): ...7. 堆排序(Heap Sort) 8. 计数排序(Counting Sort) 解压密码 douge
最大堆排序(MaxHeap Sort)是一种基于比较的排序算法,它利用了数据结构中的最大堆特性来实现排序。最大堆是一种特殊的二叉堆,每个父节点的值都大于或等于其子节点的值,通常以数组的形式存储。下面将详细介绍最大...
1. 冒泡排序(Bubble Sort) ...6.堆排序(Heap Sort) 7. 计数排序(Counting Sort) 8. 桶排序(Bucket Sort) 9. 基数排序(Radix Sort) 10. 希尔排序(Shell Sort) 解压密码 douge