题目描述查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。示例:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例:(输入如下)
3
0
fang 90
yang 50
ning 70
输出为:
fang 90
ning 70
yang 50
在这采用直接插入排序,当然别的排序方法也是可以的,但必须是稳定的。
#include<iostream>
typedef struct{
char* a;
int b;
}type;
int main()
{
using namespace std;
int index1, index2;
while(cin >> index1 >> index2)//为方便测试多个用例
{
type* ele = new type[index1];
int i;
for (i = 0; i < index1; i++)
{
ele[i].a = new char[30];
cin >> ele[i].a >> ele[i].b;
}
//输入完所有数据保存在ele结构体数组当中。
type temp;
int j;
temp.a = new char[30];
if (index2 == 1)//直接插入排序(升序)
{
for (i = 1; i < index1; i++)
{
if (ele[i].b < ele[i - 1].b)
{
temp.a = ele[i].a;
temp.b = ele[i].b;
for (j = i - 1; temp.b < ele[j].b&&j >= 0; j--)
{
ele[j + 1].a = ele[j].a;
ele[j + 1].b = ele[j].b;
}
ele[j + 1].a = temp.a;
ele[j + 1].b = temp.b;
}
}
for (i = 0; i < index1; i++)
cout << ele[i].a << ' ' << ele[i].b << endl;
}
else//直接插入排序(降序)
{
for (i = 1; i < index1; i++)
{
if (ele[i].b > ele[i - 1].b)
{
temp.a = ele[i].a;
temp.b = ele[i].b;
for (j = i - 1; temp.b > ele[j].b&&j >= 0; j--)
{
ele[j + 1].a = ele[j].a;
ele[j + 1].b = ele[j].b;
}
ele[j + 1].a = temp.a;
ele[j + 1].b = temp.b;
}
}
for (i = 0; i < index1; i++)
cout << ele[i].a << ' ' << ele[i].b << endl;
}
delete[]ele;
}
return 0;
}