package 十大排序
;
import com
.sun
.org
.apache
.bcel
.internal
.generic
.SWAP
;
public class 堆排序
2 {
public static void main(String
[] args
) {
int[] arr
={10,9,11,8,7,13,2,1,12};
sort(arr
);
for (int i
: arr
) {
System
.out
.print(i
);
System
.out
.print(" ");
}
}
private static void sort(int[] A
) {
int n
= A
.length
;
MinHeap(A
);
for (int x
= n
- 1; x
>= 0; x
--) {
int temp
= A
[0];
A
[0] = A
[x
];
A
[x
] = temp
;
MinHeapFixDown(A
, 0, x
- 1);
}
}
private static void MinHeap(int[] A
) {
int n
= A
.length
;
for (int i
= n
/ 2 - 1; i
>= 0; i
--) {
MinHeapFixDown(A
, i
, n
);
}
}
private static void MinHeapFixDown(int[] A
, int tip
, int n
) {
int left
= 2 * tip
+ 1;
int right
= 2 * tip
+ 2;
if (left
>= n
) {
return;
}
int max
= left
;
if (right
>= n
) {
} else if (A
[right
] > A
[left
]) {
max
= right
;
}
if (A
[tip
] < A
[max
]) {
int temp
= A
[tip
];
A
[tip
] = A
[max
];
A
[max
] = temp
;
} else {
return;
}
MinHeapFixDown(A
, max
, n
);
}
}
转载请注明原文地址: https://lol.8miu.com/read-5300.html