堆排序
堆排序
public static void heapSort(int[] arr) {
//构建最大堆
heapInsert(arr);
int size = arr.length;
while (size > 1) {
//调整堆顶和堆底的数值
swap(arr, 0, size - 1);
size--;
//构造最大堆
heapify(arr, 0, size);
}
}
private static void heapify(int[] arr, int beigin, int end) {
int[] arr1 = Arrays.copyOfRange(arr, beigin, end);
heapInsert(arr1);
int j = 0;
for(int i = beigin; i < end; i++){
arr[i] = arr1[j];
j++;
}
}
private static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
private static void heapInsert(int[] arr) {
int end = arr.length - 1;
while (end > 0){
int father = (end - 1) / 2;
if(arr[father] < arr[end]){
swap(arr, end, father);
}
end--;
}
}
public static void main(String[] args){
int[] arr = {3, 6, 8, 5, 7,10,11,21,23,55,23,66,1,534};
heapSort(arr);
System.out.println(arr);
}
1、构建最大堆
2、从数组的队尾往前,先将第一个和最后一个交换位置
3、重新构建最大堆
4、依次类推。。。
---------------------
参考文章:
https://blog.csdn.net/u010452388/article/details/81283998 (这篇文章相当清晰)
浙公网安备 33010602011771号