#include <iostream>
using namespace std;
void heapAdjust(int* a,int i,int size)
{
int leftChild = i*2;
int rightChild = i*2+1;
if(i>=size/2){
return;
}
int max = i;
if(leftChild<size && a[leftChild] > a[max]){
max = leftChild;
}
if(rightChild<size && a[rightChild] > a[max]){
max = rightChild;
}
if(max!=i){
swap(a[i],a[max]);
heapAdjust(a,max,size);
}
}
void heapSort(int* a,int size)
{
for(int i=size/2-1;i>=0;i--){
heapAdjust(a,i,size);
}
for(int i=size-1;i>=0;i--){
swap(a[0],a[i]);
heapAdjust(a,0,i-1);
}
}
int main()
{
int a[] = {100,3,50,8,10,2323,23,9,44,55,66,22,43,12};
int size = sizeof(a)/sizeof(int);
for(int i=0;i<size;i++){
cout<<a[i]<<" ";
}
cout<<endl;
heapSort(a,size);
for(int i=0;i<size;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
面试题:堆排序
最新推荐文章于 2023-06-25 13:37:03 发布