Package heapsort;
public class Testmain
{
/**
* Adjustment Heap
* @param array arrays
* @param I adjust the element i
* Number of elements @param length heap
*/
public static void Adaptationarray (int[] array,int i, int length)
{
Current element
int cur = i;
while (2*cur+2<=length)
{
int curvalue = Array[cur];
int leftvalue = array[2*cur+1];
int maxindex;
if (2*cur+3<=length)//Have right child node
{
Maxindex = array[2*cur+2]>leftvalue?2*cur+2:2*cur+1;
}
Else
{
Maxindex = 2*cur+1;
}
The current value is greater than the left or right node value, the end
if (Curvalue>=array[maxindex])
{
Break
}
Array[cur] = Array[maxindex];
Array[maxindex] = Curvalue;
cur = maxindex;
}
}
/**
* Initialize Maximum heap
* @param array
*/
public static void Initarray (int[] array)
{
From start position to 0
int start = array.length/2-1;
for (; start>=0;start--)
{
Adaptationarray (array,start,array.length);
}
}
/**
* Sort
* @param array
*/
public static void Sortarray (int[] array)
{
Initialize Maximum heap
Initarray (array);
int start = array.length-1; Swap the first element with the reciprocal element in turn
for (; start>0;start--)
{
int temp = array[0];
Array[0] = Array[start];
Array[start] = temp;
Adaptationarray (Array,0,start);
}
}
public static void Main (string[] args)
{
Int[] Array ={20,23,6,7,3,4,5,100,29,1};
Sortarray (array);
for (int i:array)
{
System.out.print (i+ ",");
}
}
}
Heap Sort Example-java