c++
#include<iostream>
using namespace std;
#define LEFT(i) (2*(i)+1)
#define RIGHT(i) (2*(i)+2)
#define PARENT(i) ((i)-1)/2
void display(int arr[],int heap_size);
void max_heapify(int arr[],int i,int heap_size);
void build_max_heap(int arr[],int heap_size);
void heap_sort(int arr[],int heap_size);
int main()
{
int arr[]={9,8,7,6,5,4,3,2,1};
int size=sizeof(arr)/sizeof(int);
display(arr,size);
heap_sort(arr,size);
display(arr,size);
return 0;
}
void display(int arr[],int heap_size)
{
for(int i=0;i<heap_size;i++)
cout<<arr[i]<<' ';
cout<<endl;
}
void max_heapify(int arr[],int i,int heap_size)
{
int l=LEFT(i);
int r=RIGHT(i);
int largest=i;
if (l<heap_size&&arr[l]>arr[largest])
{
largest=l;
}
if (r<heap_size&&arr[r]>arr[largest])
{
largest=r;
}
if (i!=largest)
{
int temp=arr[i];
arr[i]=arr[largest];
arr[largest]=temp;
max_heapify(arr,largest,heap_size);
}
}
void build_max_heap(int arr[],int heap_size)
{
for(int i=(heap_size-2)/2;i>=0;i--)
{
max_heapify(arr,i,heap_size);
}
}
void heap_sort(int arr[],int heap_size)
{
build_max_heap(arr,heap_size);
int temp;
for(int i = heap_size - 1; i >= 0; i--)
{
temp = arr[0];
arr[0] =arr[i];
arr[i] = temp;
max_heapify(arr, 0, i);
}
}
简单的排序---堆排序
最新推荐文章于 2024-02-07 11:00:00 发布