排序算法--堆排序
#include<iostream>
#include<algorithm>
using namespace std;
void print(int *arr,int length)
{
for(int i = 0;i < length;i++)
{
cout<<arr[i]<<"\t";
}
cout<<"\n";
}
void heapAdjust(int *arr,int i,int length)
{
int lchild = 2 * i + 1;
int rchild = 2 * (i + 1);
int max = i;
if(i <= length/2)
{
if(lchild <= length && arr[lchild] > arr[max])
max = lchild;
if(rchild <= length && arr[rchild] > arr[max])
max = rchild;
if(max != i)
{
swap(arr[max],arr[i]);
heapAdjust(arr,max,length);
}
}
}
void sort(int *arr,int length)
{
for(int i = length/2 -1 ;i >= 0; i--)
{
heapAdjust(arr,i,length);
}
for(i = length-1;i > 0;i--)
{
swap(arr[0],arr[i]);
heapAdjust(arr,0,i-1);
}
}
int main()
{
int arr[] = {8,5,7,4,6,2,3,1,9};
int size = sizeof(arr)/sizeof(int);
cout<<"排序前数组元素为:"<<endl;
print(arr,size);
sort(arr,size);
cout<<"排序后数组元素为:"<<endl;
print(arr,size);
return 0;
}

浙公网安备 33010602011771号