package com.person.tree;
import java.util.Arrays;
/**
* 大顶堆 ... 堆排序
*/
public class TreeSort {
public static void main(String[] args) {
int[] data = {9,6,8,7,0,1,10,4,2};
/*//开始位置是最后一个非叶子节点 就是最后一个节点的父节点
int start = (data.length-1) / 2;
//结束位置 数据的长度-1
for(int i = start; i >= 0; i--){
topShow(data,data.length,i);
}
System.out.print(Arrays.toString(data));*/
sort(data);
System.out.print(Arrays.toString(data));
}
//堆排序
public static void sort(int[] data){
//开始位置是最后一个非叶子节点 就是最后一个节点的父节点
int start = (data.length - 1) /2;
//调整为大顶堆
for(int i = start; i >= 0; i--){
topShow(data,data.length,i);
}
//先把数组中的第0个和堆中的最后一个数交换位置,再把前面的处理为大顶堆
for(int i = data.length-1; i > 0; i--){
int temp = data[0];
data[0] = data[i];
data[i] = temp;
topShow(data,i,0);
}
}
//大顶堆
public static void topShow(int[] data,int size,int index){
int leftNode = index * 2 + 1;
int rightNode = index * 2 + 2;
int max = index;
if(leftNode < size && data[max] < data[leftNode]){
max = leftNode;
}
if(rightNode < size && data[max] < data[rightNode]){
max = rightNode;
}
if(max != index){
int temp = data[index];
data[index] = data[max];
data[max] = temp;
topShow(data,size,max);
}
}
}
排序算法之堆排序
最新推荐文章于 2025-05-17 21:32:37 发布