堆排序
堆排序算法思路
大根堆的建立过程和代码思想
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/43a4be5984c58f6877d2a5a40dd361e1.jpeg#pic_center)
堆排序的过程
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c57664e647b21610f28e4d6391da5d86.jpeg#pic_center)
堆排序的代码(大根堆)
void heapAdjust(int A[],int k,int len){
A[0]=A[k];
for(int i=k*2;i<=len;i*=2){
if(i<len&&A[i]<A[i+1]){
i++;
}
if(A[0]>=A[i])break;
else{
A[k]=A[i];
k=i;
}
}
A[k]=A[0];
}
void buildMaxHeap(int A[],int len){
for(int i=len/2;i>0;i--){
heapAdjust(A,i,len);
}
}
void heapsort(int A[],int len){
buildMaxHeap( A,len);
for(int i=len;i>1;i--){
swap(A[i],A[1]);
heapAdjust(A,1,i-1);
}
}
堆排序的代码(小根堆)
void heapAdjust1(int A[],int k,int len){
A[0]=A[k];
for(int i=k*2;i<=len;i*=2){
if(i<len&&A[i]>A[i+1]){
i++;
}
if(A[0]<=A[i])break;
else{
A[k]=A[i];
k=i;
}
}
A[k]=A[0];
}
void buildMinHeap(int A[],int len){
for(int i=len/2;i>0;i--){
heapAdjust1(A,i,len);
}
}
void heapsort1(int A[],int len){
buildMinHeap( A,len);
for(int i=len;i>1;i--){
swap(A[i],A[1]);
heapAdjust1(A,1,i-1);
}
}