这不马上秋招了吗,熟悉熟悉算法,根据网上的原理写个堆排发现跟给的代码不一样,,,有错误请大家指出。。。
public class HeapSort {
public static void main(String[] args) {
int [] a={49,38,65,97,71,13,27,49,78,34,12,64,1};
int arrayLength = a.length;
for(int i=0;i<arrayLength-1;i++){
creatHeap(a,arrayLength-1-i);
swap(a,0,arrayLength-1-i);
}
for(int i =0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
static void creatHeap(int datas[],int lastIndex){//lastIndex=Length-1
for(int i=(lastIndex-1)/2;i>=0;i--){
int p = i;//根节点
int l = 2*p+1;//左儿子(由i=(lastIndex-1)/2 可得知左儿子必存在)
if(lastIndex>l){// 右儿子存在
if(datas[l]<datas[l+1]){
swap(datas,l,l+1);
}
}
if(datas[p]<datas[l]){
swap(datas,p,l);
}
}
}
static void swap(int[] data, int i, int j) {
int tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
}