堆排序实验
标签:rgb 内容 堆排 nbsp amp min void pre main
实验内容
【问题描述】对一含有n个整数的数组,使用堆排序将其由小到大排序。
【输入形式】第一行为元素个数n,第二行为n个整数(以空格隔开)。
【输出形式】输出n个整数(以空格隔开)
【样例输入】
6
43 2 56 1 22 9
【样例输出】
1 2 9 22 43 56
#include
#include int Min(int a,int b,int c){
if (ab)
{
if (ac)
{
return 0;
}
else
{
return 2;
}
}
else
{
if (bc)
{
return 1;
}
else
{
return 2;
}
}
}
int Min1(int a,int b){
if (ab)
{
return 0;
}
else
{
return 1;
}
}
void heapsort2(int *arr,int length){
int sta=length/2;
int temp1;
int temp2;
int temp3;
int temp4;
int temp5;
int i;
for (i = sta; i >0; i--)
{
temp5=i;
while(temp5sta)
{
temp1=2*temp5;
temp2=2*temp5+1;
if (temp2length)
{
temp3=Min(arr[temp5],arr[temp1],arr[temp2]);
if(temp3==0){
break;
}
if (temp3==1)
{
temp4=arr[temp5];
arr[temp5]=arr[temp1];
arr[temp1]=temp4;
temp5=temp1;
}
if (temp3==2)
{
temp4=arr[temp5];
arr[temp5]=arr[temp2];
arr[temp2]=temp4;
temp5=temp2;
}
}
else
{
temp3=Min1(arr[temp5],arr[temp1]);
if (temp3==1)
{
temp4=arr[temp5];
arr[temp5]=arr[temp1];
arr[temp1]=temp4;
temp5=temp1;
}
else{
break;
}
}
}
}
}
int main(){
int num=0;
int i;
int num1;
scanf("%d",&num);
int *arr=(int *) malloc(sizeof(int)*(num+1));
arr[0]=0;
for (i = 1; i )
{
scanf("%d", &arr[i]);
}
num1=num;
for (i = 1; i )
{
heapsort2(arr,num1);
arr[0]=arr[num1];
arr[num1]=arr[1];
arr[1]=arr[0];
printf("%d",arr[num1]);
if (num1!=1)
{
printf(" ");
}
num1=num1-1;
}
return 0;
}
好了,我们下回见,peace
堆排序实验
标签:rgb 内容 堆排 nbsp amp min void pre main
原文地址:https://www.cnblogs.com/gitpy123/p/13972417.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
堆排序实验
文章链接:http://soscw.com/index.php/essay/65312.html
评论