public class HeapSort2 {
private static int leftChild(int i){
return 2 * i + 1;
}
private static void shiftDown(Comparable[] data,int i, int n){
int child;
Comparable tmp;
for( tmp = data[i]; leftChild(i) < n; i = child ){
child = leftChild(i);
if(child != n-1 && data[child].compareTo(data[child+1])< 0)
child ++;
if(tmp.compareTo(data[child]) < 0)
data[i] = data[child];
else
break;
}
data[i] = tmp;
}
public static void swapReferences(Comparable[] data, int src ,int des){
Comparable tmp;
tmp = data[des];
data[des] = data[src];
data[src] = tmp;
}
public static void heapSort(Comparable[] a){
for(int i = a.length / 2; i >=0; i--)
shiftDown(a, i, a.length);
for(int i = a.length - 1; i > 0 ; i--){
swapReferences(a,0,i);
shiftDown(a,0,i);
}
}
public static void main(String[] args){
Comparable[] a = new Comparable[15];
for(int i = 0; i < a.length; i ++)
a[i] = (int) (Math.random() * 100);
for(int i = 0; i< a.length; i++)
System.out.print(a[i]+" ");
System.out.println("");
heapSort(a);
System.out.println("end");
for(int i = 0; i< a.length; i++)
System.out.print(a[i]+" ");
}
}
java 实现 堆排序算法
最新推荐文章于 2024-08-24 14:08:21 发布