您的位置:首页 > 其它

堆排序

2016-12-06 20:29 274 查看
package heapsort;

import java.util.Arrays;
public class HS1 {
public static void main(String[] args) {
int[] A={87,45,78,32,17,65,53,9,63};
BuildHeap(A);
System.out.println(Arrays.toString(A));
}
public static void BuildHeap(int A[]){
int len=A.length;
int index=len-1;
int father;
for(father=index/2-1;father>=0;father--){//父节点从中间向前面走
AdjustDown(A, father, index);//第二个参数是父节点,第三个是最后一个元素的下标
}
for(int i=A.length-1;i>=0;i--){
swap(A,0,i);//将第一个()与最后一个交换位置,然后堆去掉最后一个
AdjustDown(A, 0, i-1);

}
}

public static void swap(int[] A,int a,int b){
int c;
c=A[a];
A[a]=A[b];
A[b]=c;
}
public static void AdjustDown(int A[],int fa,int index){
int b=A[fa];
for(int left=2*fa+1;left<=index;left=2*left+1){//i是左孩子
if(left+1<=index&&A[left]<A[left+1]){//如果有右孩子则比较
left++;
}
if(b>=A[left]){
break;
}else{
A[fa]=A[left];
fa=left;//修改k
}
}
A[fa]=b;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: