public class HeapSort {
public void sort(int[] a) throws Exception {
if((a==null) || (a.length==0)){
throw new Exception();
}
build(a);
run(a);
}
private void build(int[] a){
int size = a.length/2 -1;
for(int i=size; i>=0; i--){
ajust(a, i, a.length);
}
}
private void ajust(int[] a, int parent, int length){
if(parent > (length/2 -1)){
return;
}
int left_child = 2*parent +1;
int right_child = 2*parent +2;
if(right_child == length){
if(a[parent] > a[left_child]){
swap(a, left_child, parent);
}
return;
}
int min = a[left_child] < a[right_child] ? a[left_child] : a[right_child];
if(a[parent] > min){
if(a[left_child] < a[right_child]){
swap(a, left_child, parent);
ajust(a, left_child, length);
}else{
swap(a, right_child, parent);
ajust(a, right_child, length);
}
}
}
private void run(int[] a){
int i = a.length - 1;
while(i>0){
swap(a, 0, i);
ajust(a, 0, i);
i--;
}
}
private void swap(int[] a, int p1, int p2){
int temp = a[p1];
a[p1] = a[p2];
a[p2] = temp;
}
/**
* @param args
*/
public static void main(String[] args) {
int[] a = {7,2,4,8,3,5,1,9,0,6};
HeapSort hs = new HeapSort();
try {
hs.sort(a);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Tools.printArray(a);
}
}堆排序
最新推荐文章于 2024-06-09 16:03:45 发布
31万+

被折叠的 条评论
为什么被折叠?



