package com.hnist.lzn.Resulbe;
public class HeapSort {
public static void Sort(int[] arr){
if(arr == null || arr.length == 0)
return;
HeapSorts(arr);
}
public static void HeapSorts(int[] arr){
// 堆排逻辑
if(arr ==null || arr.length <2)
return;
for(int i = 0;i < arr.length ;i++)
{
heapInsert(arr,i); // 0-i
}
int heapSize = arr.length;
swap(arr,0,--heapSize);
while(heapSize > 0)
{
heapfly(arr,0,heapSize);
swap(arr,0,--heapSize);
}
}
// 上浮
public static void heapInsert(int[] arr,int index){
while(arr[index] > arr[(index-1)/2]){
swap(arr,index,(index-1)/2);
index = (index-1)/2;
}
}
// 下沉
public static void heapfly(int[] arr,int i,int heapSize){
int left = i*2+1;
while(left < heapSize){
int largetest = left+1<heapSize&& arr[left]<arr[left+1]?left+1:left;
largetest = arr[largetest]>arr[i]?largetest:i;
if(largetest== i)
break;
swap(arr,largetest,i);
i = largetest;
left = i*2+1;
}
}
public static void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void main(String[] args) {
int[] nums = {1,2,3,7,2,0,8};
Sort(nums);
for(int i:nums){
System.out.print(i);
}
}
}
上浮,下沉的堆排序
最新推荐文章于 2022-04-15 22:31:14 发布