#include <iostream.h>
#include <stdlib.h>
#define maxarray 10
/*------------------------------
函数类型:void
功能:堆排序
-------------------------------*/
void HeapSort(int arr[],int n);
/*------------------------------
函数类型:void
功能:假设arr[s...m]除arr[s]外都是有序的,将arr[s..m]调整为大顶堆
-------------------------------*/
void HeapAdjust(int arr[],int s,int m);
/*------------------------------
函数类型:void
功能:将一个无序的数组,建立一个大顶堆
-------------------------------*/
void HeapCreat(int arr[],int n);
void main()
{
int array[maxarray];
cout<<"随机产生一个数组如下:"<<endl;
for(int i=0;i<10;i++)
{
array[i]=rand()%100;
cout<<array[i]<<'\t';
}
cout<<endl;
cout<<"堆排序过程:1.建立大顶堆;2.堆顶堆底元素互换,即排序出一个最大值放在记录最后方;3.调整其余的元素重新成为大顶堆;4.重复123步直到结束。"<<endl;
HeapSort(array,maxarray);//堆排序
for (i=0;i<10;i++)
cout<<array[i]<<'\t';
cout<<endl;
}
/*------------------------------
函数HeapSort()的实现
-------------------------------*/
void HeapSort(int arr[],int n)
{
HeapCreat(arr,n);
int k;
for(int i=0;i<n;i++)
{
k=arr[n-i];
arr[n-i]=arr[0];
arr[0]=k;
HeapAdjust(arr,0,n-1-i);
}
}
/*------------------------------
函数HeapAdjust()的实现
-------------------------------*/
void HeapAdjust(int arr[],int s,int m)
{
int j;
int rc=arr[s];
for(j=2*s+1;j<=m;j*=2+1)
{
if(j<m&&arr[j]<arr[j+1]) j++;
if(rc>arr[j]) break;
arr[s]=arr[j];
s=j;
}
arr[s]=rc;
}
/*------------------------------
函数HeapCreat()的实现
-------------------------------*/
void HeapCreat(int arr[],int n)
{
for(int i=n/2;i>=0;i--)
HeapAdjust(arr,i,n);
}