public class HeapSort
{
public void heapSort(int[] data, boolean isDesc)
{
if(data == null)
{
return;
}
if(data.length == 0)
{
return;
}
heapCreate(data, isDesc);
swap(data, 0, data.length-1);
for(int i = 1; i < data.length; i++)
{
heapAdjustment(data, data.length-i, 0, isDesc);
swap(data, 0, data.length-1-i);
}
}
private void heapCreate(int[] data, boolean isDesc)
{
for(int i = (data.length-2)/2; i >= 0; i--)
{
heapAdjustment(data, data.length, i, isDesc);
}
}
private void heapAdjustment(int[] data,int length, int node, boolean isDesc)
{
if(isDesc == true)
{
int max = node;
if((node*2+1 < length)&&(data[node*2+1] < data[max]))
{
max = node*2+1;
}
if((node*2+2 < length)&&(data[node*2+2] < data[max]))
{
max = node*2+2;
}
if(max != node)
{
swap(data, max, node);
heapAdjustment(data, length, max, isDesc);
}
}
else
{
int min = node;
if((node*2+1 < length)&&(data[node*2+1] > data[min]))
{
min = node*2+1;
}
if((node*2+2 < length)&&(data[node*2+2] > data[min]))
{
min = node*2+2;
}
if(min != node)
{
swap(data, min, node);
heapAdjustment(data, length, min, isDesc);
}
}
}
private void swap(int[] data, int m, int n)
{
int temp = data[m];
data[m] = data[n];
data[n] = temp;
}
}
Heap Sort
最新推荐文章于 2023-12-14 21:10:45 发布