堆排序是一种基于选择排序的先进排序方法。分为大顶堆和小顶堆。
#include <iostream>
#include <iomanip>
using namespace std;
void swap(int &a,int &b);
void sorthelp(int data[],int low,int high);
void heapsort(int data[],int n);
int main()
{
int number;
cout<<"请输入你要输入的数据的个数"<<endl;
cin>>number;
int data[number];
cout<<"请输入你要排序的"<<number<<"个数据"<<endl;
for(int i=0;i<number;i++)
{
cin>>data[i];
}
cout<<"请确认的数据:"<<endl;
for(int i=0;i<number;i++)
{
cout<<data[i]<<setw(5);
}
cout<<endl;
heapsort(data,number);
cout<<"顶堆排序后的顺序是:"<<endl;
for(int i=0;i<number;i++)
{
cout<<data[i]<<setw(5);
}
}
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void sorthelp(int data[],int low,int high)
{
for(int f=low,i=2*low+1;i<=high;i=2*i+1)
{
if(i<high&&data[i]<data[i+1])
{
i++;
}
if(data[f]>=data[i])
{
break;
}
swap(data[f],data[i]);
f=i;
}
}
void heapsort(int data[],int n)
{
int i;
for(i=(n-2)/2;i>=0;--i)
{
sorthelp(data,i,n-1);
};
for(i=n-1;i>0;--i)
{
swap(data[0],data[i]);
sorthelp(data,0,i-1);
}
}
//堆排序是一种基于选择排序的先进排序方法。分为大顶堆和小顶堆。
#include <stdio.h>
#include <stdlib.h>
void heapsort(int array[],int number);
void siftadjust(int array[],int low,int high);
void swap(int *a, int *b);
int main()
{
int i,count;
printf("please input the number of your data:\n");
scanf("%d",&count);
int array[count];
printf("please input the number:\n");
for(i=0;i<count;i++)
scanf("%d",&array[i]);
printf("before sort:\n");
for(i=0;i<count;i++)
printf("%d ",array[i]);
printf("\n");
heapsort(array,count);
printf("after sort:\n");
for(i=0;i<count ; i++)
printf("%d ",array[i]);
printf("\n");
return 0;
}
void heapsort(int array[],int number)
{
int i;
for(i=(number-2)/2;i>=0;--i)
{
siftadjust(array,i,number-1);
}
for(i=number-1;i>0;--i)
{
swap(&array[0],&array[i]);
siftadjust(array,0,i-1);
}
}
void siftadjust(int array[],int low , int high)
{
int f,i;
for(f=low,i=2*low+1;i<=high;i=2*i+1)
{
if(i<high && array[i]<array[i+1])
{
i++;
}
if(array[f]>=array[i])
{
break;
}
swap(&array[f],&array[i]);
f=i;
}
}
void swap(int *a, int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}