#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check(int *array, int i);
int main()
{
char initial[100];
int number[100]={0};
int number1[100]={0};
int temp;
int i,j=0;
int length;
int sum=0;
number[0]=100000;
int amount=0;
int s;
int comparetime;
int switchtime;
scanf("%s",initial);
length=strlen(initial);
for(i=0;i<length;i++)
{
if(initial[i]==',')
{
amount++;
}
}
for(i=1;i<=amount;i++)
{
if(initial[j]==',')
{
j++;
}
else if(initial[j]=='\0')
{
break;
}
while(initial[j]!=','&&initial[j]!='\0'&&initial[j]!='\n')
{
sum=sum+initial[j]-'0';
j++;
sum=sum*10;
}
number[i]=sum/10;
sum=0;
}
s=amount;
scanf("%d",&comparetime);//输入变换次数
switchtime=comparetime-1;
for(i=comparetime;i>0;i--)
{
for(j=amount/2;j>0;j--)
{
check(number,j);
}
if(switchtime>0)
{
temp=number[1];
number[1]=number[amount];
number[amount]=0;
number1[amount]=temp;
switchtime--;
for(int m=1;m<amount;m++)
{
number1[m]=number[m];
}
}
else if(switchtime==0)
{
for(int m=1;m<=amount;m++)
{
number1[m]=number[m];
}
}
amount--;
}
for(int m=1;m<=s;m++)
{
printf("%d,",number1[m]);
}
return 0;
}
int check(int *array, int i)
{
int m,n;
int temp;
m=2*i;
n=2*i+1;
//有两个子节点//
if(array[m]!=0&&array[n]!=0)
{
if(array[m]>array[n])
{
if(array[i]<array[m])
{
temp=array[i];
array[i]=array[m];
array[m]=temp;
//check(array,i/2);
check(array,m);
}
}
else
{
if(array[i]<array[n])
{
temp=array[i];
array[i]=array[n];
array[n]=temp;
check(array,n);
}
}
}
//没有子节点//
else if(array[m]==0&&array[n]==0)
{
return 0;
}
//有一个子节点
else
{
if(array[m]>array[i])
{
temp=array[i];
array[i]=array[m];
array[m]=temp;
check(array,m);
}
else
{
return 0;
}
}
return 0;
}
heap sort algorithm
最新推荐文章于 2023-09-08 15:23:50 发布