在网上看了一遍JAVA实现的堆排序,代码不是太简洁易懂,自己实现了一下:
package sort;
/**
*
* @author Leon
*
*/
public class HeapSort {
public static void adjustHeap(int[] array,int n)
{
//start from the last non-leaf node
int start=n/2;
int temp;
for(int i=start;i>0;i--)
{
//compare with left child
if(2*i-1<n&&array[i-1]<array[2*i-1])
{
temp=array[i-1];
array[i-1]=array[2*i-1];
array[2*i-1]=temp;
}
//compare with right child
if(2*i<n&&array[i-1]<array[2*i])
{
temp=array[i-1];
array[i-1]=array[2*i];
array[2*i]=temp;
}
}
}
public static void heapSort(int[] array)
{
int num=array.length;
int temp;
while(num>1)
{
adjustHeap(array,num);
//select the largest value from the root node and put it into the array last.
temp=array[num-1];
array[num-1]=array[0];
array[0]=temp;
num--;
}
}
public static void main(String[] args)
{
int[] array ={7,3,4,3,8,15,20,17,9,31};
System.out.println("Before:");
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+" ");
}
System.out.println("\nAfter:");
heapSort(array);
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+" ");
}
}
}