您的位置:首页 > 其它

堆排序

2014-03-29 15:25 141 查看
public class MyHeapSort {

private static void OutPrint(int nums[])
{
for(int i:nums)
System.out.print(i+"  ");
System.out.println();
}
public static void main(String[] args) {
int numbers[]=new int[]{1,5,2,7,4,2,8,34};
OutPrint(numbers);
HeapSort(numbers);
OutPrint(numbers);
}
private static void HeapSort(int[] numbers) {
buildHeap(numbers);                //建堆
for(int i=numbers.length-1;i>0;i--)      //交换
{
int temp=numbers[0];
numbers[0]=numbers[i];
numbers[i]=temp;

adjustHeap(numbers,0,i);
}
}
private static void adjustHeap(int[] numbers, int i, int size) {    //调整

int j=i*2+1;                                //左孩子节点
while(j<size)
{
if(j+1<size&&numbers[j]<numbers[j+1])
j++;
if(numbers[i]<numbers[j])                      //孩子节点大于父亲节点
{
int temp=numbers[i];
numbers[i]=numbers[j];
numbers[j]=temp;
i=j;
}
else
break;
j=2*i+1;                                //深入下去
}

}
private static void buildHeap(int[] numbers) {
for(int i=numbers.length/2-1;i>=0;i--)
{
adjustHeap(numbers,i,numbers.length);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: