年龄排序
【题目描述】
有N个同学,每个同学有姓名(name)、年龄(age)两个属性。
请按照年龄从小到大的顺序,分别使用选择排序、插入排序算法进行排序,并比对两个升序序列有多少个元素相同。
输入:
第一行有一个正整数N(1<=N<=10000)。
接下来有N行,每一行包含两个属性,分别是学生的姓名(name)以及年龄(age),其中1<=strlen(name)<=32,5<=age<=30
输出:
单独一行,表示选择排序和插入排序的序列有多少元素相同。
【样例输入】:
3
8 xiaotong
8 xiaocheng
6 xiaomei
【样例输出】:
1
【样例解释】:
若使用选择排序,则会得到序列: {6 xiaomei},{8 xiaocheng},{8 xiaotong}
若使用插入排序,则会得到序列: {6 xiaomei},{8 xiaotong},{8 xiaocheng}
我们可以发现,选择排序的序列与插入排序的序列只有第1个位置元素相同,第2、第3个位置的元素均不相同,所以返回1
代码:
#include<iostream>
#include<string>
using namespace std;
struct xc{
string name;
int age;
};
void csort(xc a[], int n) {
for (int i = 2; i <= n; i++) {
int x = a[i].age;
int j = i - 1;
while (j >= 1) {
if (x < a[j].age) {
a[j + 1].age = a[j].age;
a[j + 1].name = a[j].name;
j--;
continue;
}
break;
}
a[j+1].age = x;
}
}
void xsort(xc a[], int n) {
for (int i = 1; i <= n - 1; i++) {
int minn = i;
for (int j = minn + 1; j <= n; j++) {
if (a[minn].age > a[j].age) {
minn = j;
}
}
swap(a[minn], a[i]);
}
return;
}
int main(){
xc a[101],b[101];
int n;
int ans=0;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i].age >> a[i].name;
b[i].age = a[i].age;
b[i].name =a[i].name;
}
csort(a, n);
xsort(b, n);
for(int i = 1; i<=n; i++){
if((a[i].name==b[i].name)&&(a[i].age==b[i].age)) ans++;
}
cout << ans;
return 0;
}
输出0?