package com.hzh.sorting;
/**
* Created by huzhenhua on 2017/11/7.
*/
public class HeapSort {
private static class Heap {
private int[] array;
private int count;
private int capacity;
private int heapType;
public Heap(int capacity, int headType){
this.capacity = capacity;
this.heapType = headType;
this.count = 0;
this.array = new int[capacity];
}
public int getParent(int i){
if(i <= 0 || i >= this.count){
return -1;
}
return (i-1)/2;
}
public int getLeftChild(int i){
int left = 2*i + 1;
if(left >= count){
return -1;
}
return left;
}
public int getRightChild(int i){
int right = 2*i + 2;
if(right >= count){
return -1;
}
return right;
}
public int getExtremum(){
if(this.count == 0){
throw new IndexOutOfBoundsException("empty heap");
}
return this.array[0];
}
public void percolateDown(int i){
if(i < 0){
return;
}
int l = getLeftChild(i);
int r = getRightChild(i);
int temp;
int extremum;
if(l == -1){
extremum = i;
}
else if(r == -1){
extremum = l;
}
else{
if(heapType == 1) {
extremum = array[l] > array[r] ? l : r;
extremum = array[extremum] > array[i] ? extremum : i;
} else {
extremum = array[l] < array[r] ? l : r;
extremum = array[extremum] < array[i] ? extremum : i;
}
}
if(extremum != i){
temp = array[i];
array[i] = array[extremum];
array[extremum] = temp;
percolateDown(extremum);
}
else{
return;
}
}
public int insert(int data){
if(count + 1 > capacity){
throw new IndexOutOfBoundsException();
}
array[count++] = data;
int i = count-1;
if(heapType == 1) {
while (i >= 0 && data > array[(i - 1) / 2]) {
array[i] = array[(i - 1) / 2];
i = (i - 1) / 2;
}
} else {
while(i >= 0 && data < array[(i - 1) / 2]){
array[i] = array[(i - 1) / 2];
i = (i - 1) / 2;
}
}
array[i] = data;
return i;
}
public int delete(int i){
if(count == 0){
throw new IndexOutOfBoundsException("Empty Heap");
}
int val = array[i];
array[i] = array[count-1];
count --;
percolateDown(i);
return val;
}
public int deleteExtreme(){
if(count == 0){
throw new IndexOutOfBoundsException("Empty Heap");
}
int val = array[0];
array[0] = array[count-1];
count--;
percolateDown(0);
return val;
}
}
public static void heapSort(int[] A, int n){
Heap heap = new Heap(n, 0);
for(int i = 0; i < n; i++){
heap.array[i] = A[i];
}
heap.count = n;
for(int i = (n-2)/2; i >= 0; i--){
heap.percolateDown(i);
}
for(int i = n-1; i > 0; i--){
int temp = heap.array[0];
heap.array[0] = heap.array[i];
heap.array[i] = temp;
heap.count --;
heap.percolateDown(0);
}
for(int i = 0; i < n; i++){
System.out.println(heap.array[i]);
}
}
public static void main(String[] args) {
int[] A = {1,2,34,46,36,8,9,42,23,15};
heapSort(A, 10);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
读书笔记:数据结构与算法分析 Java语言描述.zip (99个子文件)
读书笔记:数据结构与算法分析 Java语言描述
DataStructuresAndAlgorithms
DataStructuresAndAlgorithms.iml 836B
pom.xml 783B
src
test
java
com
hzh
LinkedListTest.java 380B
ThreadId.java 1KB
Spiciness.java 127B
AppTest.java 635B
Dog.java 539B
main
java
com
hzh
sorting
HeapSort.java 4KB
SelectionSort.java 459B
CountingSort.java 714B
QuickSort.java 1KB
RadixSort.java 1006B
MedianDivideAndConquer.java 1KB
Question16QuickSort.java 1KB
ShellSort.java 156B
InsertionSort.java 751B
BubbleSort.java 539B
FindSecondEfficiently.java 837B
MergeSort.java 1KB
tree
BinaryTreeNode.java 933B
BinarySearchTree.java 3KB
BlancedBinarySearchTree.java 190B
MedianOfInifiteSeries.java 1KB
BinaryTree.java 3KB
Heap.java 3KB
AVLTree.java 4KB
stack
JudgeStrIsOperational.java 917B
ArrayStack.java 2KB
ComputeSpan.java 920B
ArrayWithTwoStack.java 1KB
JudgePalindromeByStack.java 771B
LLStack.java 1KB
QueueByTwoStack.java 1KB
MaxRectangleAreaWithHistogram.java 2KB
string
ReverseString.java 681B
StringMatch.java 3KB
StringArrangement.java 158B
queue
DynamicArrayQueue.java 2KB
EmptyQueueException.java 250B
MaxValueSlidingWindow.java 2KB
App.java 613B
swordsRefersToOffer
ClassInitialization2.java 435B
MaxSumOfSubArray42.java 1KB
VerifyPostSequenceOfBST.java 1KB
DeleteRepeatedNode.java 659B
DeleteNode18.java 1KB
NumberOf1Between1AndN43.java 1KB
Sum.java 3KB
CombationsOfString.java 688B
MergeSortedArray5.java 1KB
MaxProductAfterCutting14.java 1KB
IsPopOrder.java 1KB
ReplaceSpaceOfString5.java 2KB
CloneComplexLinkedList.java 1KB
SmallestNumberOfRotateArray11.java 2KB
CountingSort.java 116B
LeastKNumbers40.java 2KB
PrintLinklistInTurn6.java 1KB
Print1ToMaxOfNDigits17.java 2KB
BinarySearchTreeToBilateralList36.java 2KB
QuickSort.java 1KB
LongestSubStringWithSameChar48.java 1KB
NumberAtIndex44.java 1KB
RebuildBinaryTree7.java 2KB
Power16.java 1KB
QueueWithTwoStack8.java 121B
PrintMatrixClockwise.java 2KB
RegexMatching19.java 1KB
NumberOfOne15.java 874B
MinNumberConsistsOfIntegerArray45.java 2KB
HasSubtree26.java 1024B
GetNextOfBinaryTree8.java 910B
PrintBinaryTree32.java 3KB
IsNumeric.java 1KB
RepeatedNumberOfArray3.java 2KB
FindFromTwoDimensionalArray4.java 2KB
MovingCount13.java 2KB
MoreThanHalfNum39.java 2KB
PathOfMatrix12.java 2KB
DoubleCheckLockSingleton1.java 485B
find
FirstRepeatNumber.java 793B
LinkedList
Node.java 475B
ComplexListNode.java 644B
ImplementStackWithLinkedlist.java 2KB
FindKthReverse.java 418B
OrderedLinkedList.java 1KB
LinkedList.java 3KB
.git
index 10KB
HEAD 23B
refs
heads
master 41B
tags
remotes
origin
master 41B
objects
pack
pack-2192838440fe0ef797393abb3e73b68797fe514c.idx 8KB
pack-2192838440fe0ef797393abb3e73b68797fe514c.pack 53KB
info
FETCH_HEAD 136B
logs
HEAD 130B
refs
heads
master 130B
remotes
origin
master 144B
hooks
config 273B
branches
.gitignore 15B
共 99 条
- 1
资源评论
baidu_16992441
- 粉丝: 311
- 资源: 1043
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功