import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
int arr[]={2,4,5,1,0,3,9,8,7,6};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void Swap(int arr[],int i,int j){
arr[i]=arr[i]+arr[j];
arr[j]=arr[i]-arr[j];
arr[i]=arr[i]-arr[j];
}
public static void adjustHeap(int arr[],int i,int length){
int temp=arr[i];
for (int k=2*i+1; k< length; k=2*k+1) {
if(k+1<length && arr[k]<arr[k+1]){//如果左子结点小于右子结点,k指向右子结点
k++;
}
if(arr[k]>temp)
{
arr[i] = arr[k];
i = k;
}
else
{
break;
}
}
arr[i] = temp;
}
public static void sort(int []arr){
//1.构建大顶堆
for(int i=arr.length/2-1;i>=0;i--){
//从第一个非叶子结点从下至上,从右至左调整结构
adjustHeap(arr,i,arr.length);
}
//2.调整堆结构+交换堆顶元素与末尾元素
for(int j=arr.length-1;j>0;j--){
Swap(arr,0,j);//将堆顶元素与末尾元素进行交换
adjustHeap(arr,0,j);//重新对堆进行调整
}
}
}
堆排序
最新推荐文章于 2023-05-28 11:19:59 发布