The main principle of heap sorting is to use the features of the heap to first generate the largest heap, and then exchange the root of the heap with the last leaf each time to remove the last leaf. Then generate the largest heap and loop again.
/// <Summary>
/// Heap sorting
/// </Summary>
/// <Param name = "myarray"> </param>
/// <Returns> </returns>
Private int [] heapsotr (INT [] myarray)
{
Int I;
Headadjust (myarray, 0, myarray. Length-1 );
For (I = myarray. Length-1; I> 0; I --)
{
Swap (myarray, 0, I );
Headadjust (myarray, 0, I-1 );
}
Return myarray;
}
/// <Summary>
/// Generate heap
/// </Summary>
/// <Param name = "myarray"> </param>
/// <Param name = "S"> </param>
/// <Param name = "M"> </param>
Private void headadjust (INT [] myarray, int low, int high)
{
If (low {
Int J = 0;
Int temp = 0;
Int K = 0;
For (INT I = high/2; I> = low; I --)
{
K = I;
J = 2 * k + 1;
Temp = myarray [I];
While (J + 1 <= high)
{
If (myarray [J] <myarray [J + 1])
++ J;
If (temp <myarray [J])
{
Myarray [k] = myarray [J];
K = J;
J = 2 * k + 1;
}
Else
{
J = high + 1;
}
Myarray [k] = temp;
}
}
}
}
/// <Summary>
/// Exchange value
/// </Summary>
/// <Param name = "myarray"> </param>
/// <Param name = "I"> </param>
/// <Param name = "J"> </param>
Private void swap (INT [] myarray, int I, Int J)
{
Int temp = myarray [I];
Myarray [I] = myarray [J];
Myarray [J] = temp;
}