堆排序
import java.util.*;
public class Solution {
public int[] MySort (int[] arr) {
int length=arr.length;
buildMaxHeap(arr,length);
for(int i=0;i<=length-1;i++){
swap(arr,0,length-1-i);
maxheapfy(arr,0,length-1-i);
}
return arr;
}
public int getMax(int[] arr){
int max=arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max)
max=arr[i];
}
}
public void buildMaxHeap(int[] arr,int heapLen){
for(int i=(heapLen-2)/2;i>=0;i--){
maxheapfy(arr,i,heapLen);
}
}
public void maxheapfy(int[] arr,int root,int heapLen){
int left=root*2+1;
int right=root*2+2;
int largest=root;
if(left<heapLen && arr[left]>arr[root])
largest=left;
if(right<heapLen && arr[right]>arr[largest])
largest=right;
if(largest!=root){
swap(arr,largest,root);
maxheapfy(arr,largest,heapLen);
}
}
public void swap(int[] arr, int index1,int index2){
int temp=arr[index1];
arr[index1]=arr[index2];
arr[index2]=temp;
}
}