解题思路:
1.由题可得,对于男女生性别的身高排序,男生在最左边,身高由低到高,女生在右边,身高由高到低
2.建立两个double数组,数组a放男生的身高,数组b放女生的身高,利用选择排序和插入排序分别排序
3.输出男生身高,再输出女生身高
#include<bits/stdc++.h>
using namespace std;
double a[50],b[50];
int main()
{
int n,num1=0,num2=0;
double x;
string s;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s>>x;
if(s=="male")
a[++num1]=x;
else if(s=="female")
b[++num2]=x;
}
for(int i=1;i<=num1-1;i++)//选择排序
{
int k=i;//确定该位置的编号
for(int j=i+1;j<=num1;j++)//在他后面的数中选择
{
if(a[j]<a[k])//如果有数比它小
{
k=j;//将j的编号赋值给k
}
}
if(k!=i)//如果k发生了变化
{
double xx=a[i];
a[i]=a[k];
a[k]=xx;
}//将i位置和k位置的互换
}
for(int i=2;i<=num2;i++)//插入排序
{
int k=i-1;
double xx=b[i];
while(k>0&&b[k]<xx)
{
b[k+1]=b[k];
k--;
}
if(k!=i-1)
b[k+1]=xx;
}
for(int i=1;i<=num1;i++)
printf("%.2lf ",a[i]);
for(int i=1;i<=num2;i++)
printf("%.2lf ",b[i]);
return 0;
}