堆排序
时间复杂度
O(n log2n)
建堆时间:O(n)
每次调整:O(h)
空间复杂度
O(1)
辅助空间为 常数个辅助单元
适用性
顺序存储(链式存储)
稳定性
不稳定!
代码
import java.util.Scanner;
public class Heap {
public static void adjust(int []list,int k,int len) {
list[0]=list[k];
for(int i=2*k;i<=len;i=i*2) {
if(i<len && list[i]<list[i+1]) {
i++;
}
if(list[0]>list[i])
break;
else {
list[k]=list[i];
k=i;
}
}
list[k]=list[0];
}
public static void maxHeap(int []list,int len) {
for(int i=len/2;i>0;i--) {
adjust(list, i, len);
}
}
public static void sort(int []list,int len) {
maxHeap(list, len);
for(int i=len;i>1;i--) {
int temp=list[i];
list[i]=list[1];
list[1]=temp;
adjust(list, 1, i-1);
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []list=new int[n+1];
for(int i=1;i<=n;i++) {
list[i]=sc.nextInt();
}
sort(list,n);
for(int i=1;i<=n;i++) {
System.out.print(list[i]+" ");
}
sc.close();
}
}