您的位置:首页 > 编程语言 > Java开发

Java 堆排序算法

2010-02-21 00:36 162 查看
/**
* 堆排序
*
* */
public void heapSort(double[] a){
double temp;
initCreateHeap(a);
for(int i = a.length - 1; i > 0; i --){
temp = a[0];
a[0] = a[i];
a[i] = temp;
createHeap(a, i, 0);
}
}

/**
* 将数组看成完全二叉树,建立最大堆
* */
private void initCreateHeap(double[] a){

for(int i = (a.length-1)/2; i >= 0; i --){
createHeap(a, a.length,i);
}

}

private void createHeap(double[] a,int n ,int p){
int a1inum = 2 * p + 1;
boolean currentIsMax = false;
double temp = a[p];
while(a1inum < n && !currentIsMax){
if(a1inum < n -1 && a[a1inum] < a[a1inum+1]){
a1inum ++;//记录左右节点最大的数组元素下标
}

if(temp > a[a1inum]){
currentIsMax = true;
}else{
a[p] = a[a1inum];//将大者放到上移
p = a1inum;
a1inum = 2 * p + 1;
}
}

a[p] = temp;
}


不停的重建堆,直到排序完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: