堆排序实际上利用了树的原理,其中在进行堆排序的过程,要先对给定的数组进行建堆(本算法采用的是大堆,即根节点比左右孩子都大),然后获取数组的中间值,根据此值,进行遍历建堆。具体Java实现代码如下所示:
public class HeapSort {
public void heapSort(int[] array){
if (array == null || array.length<=1){
return;
}
//创建大堆
createMaxHeap(array);
for (int i=array.length-1;i>=1;i--){
//将第一个值(此时为最大值)与第i个值交换
exchange(array,0,i);
//获取最大值,放到数组的第一位
maxHeap(array,i,0);
}
}
//创建大堆(根节点为最大值)
private void createMaxHeap(int[] array) {
if (array==null || array.length<=1){
return;
}
int half=(array.length-1)/2;
for (int i=half;i>=0;i--){
maxHeap(array,array.length,i);
}
}
//将最大的值升到最前面
private void maxHeap(int[] array, int heapSize, int index) {
int left=2*index+1;
int right=2*index+2;
int largest=index;
if (left<heapSize&&array[left]>array[index]){
largest=left;
}
if (right<heapSize&&array[right]>array[largest]){
largest=right;
}
if (index!=largest){
exchange(array,index,largest);
maxHeap(array,heapSize,largest);
}
}
private void exchange(int[] array, int index1, int index2) {
int temp=array[index1];
array[index1]=array[index2];
array[index2]=temp;
}
public static void main(String[] args){
HeapSort heapSort=new HeapSort();
int[] array=new int[]{39,44,1,0,8,66,23,67,9,15,100,70,22,3,6,54 };
heapSort.heapSort(array);
for (int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
}
排序算法之堆排序
最新推荐文章于 2024-10-27 21:30:45 发布