参考代码:百度百科。
时间复杂度:O(nlogn),(其中最快,最慢和平均相等)
空间复杂度:O(1);
不稳定排序。
import java.util.*;
/*
input :3 4 2 1 5
output:[1 2 3 4 5]
*/
public class heapSort0328 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] s = str.trim().split(" ");
int n = s.length;
int[] arr = new int[n];
for(int i = 0;i < n;i++){
arr[i] = Integer.parseInt(s[i]);
}
heapSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void heapSort(int[] arr){
for(int i = arr.length / 2 - 1;i >= 0;i--){
adjustHeap(arr,i,arr.length);
}
for(int j = arr.length - 1;j > 0;j--){
swap(arr,0,j);
adjustHeap(arr,0,j);
}
}
private static void adjustHeap(int[] arr,int i,int n){
int tmp = arr[i];
for(int k = i * 2 + 1;k < n;k = k * 2 + 1){
if(k + 1 < n && arr[k] < arr[k - 1]){
k++;
}
if(arr[k] > tmp){
swap(arr,i,k);
i = k;
}else{
break;
}
}
}
private static void swap(int[] arr,int i,int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}