题目描述
输入n个学生的名字(以小写字母的形式),然后按照字母表顺序输出
要求用冒泡排序和选择排序两种方法
输出为序列号加空格加名字
输入样例
5
hnuxiaobi
huahua
huihui
yiy
oiuj
输出样例
1 hnuxiaobi
2 huahua
3 huihui
4 oiuj
5 yiy
要求两种方法
冒泡如下
#include <iostream>
using namespace std;
void swap(string a[], int i, int j)
{
string temp=a[i];
a[i] = a[j];
a[j] = temp;
}
int you(string a, string b) {
char* aa = &a[0];
char* bb = &b[0];
do
{
if (*aa<*bb)
{
return 2;
}
if(*aa>*bb){
return 0;
}
aa++;
bb++;
} while (*aa||*bb);
return 0;
}
int main() {
int n;
cin >> n;
string*a=new string [n];
for (int i = 0; i < n; i++) {
cin >> a[i];
cin.get();
}
for (int i = 0;i<n-1; i++)
{
for (int j=0;j<n-1-i;j++) {
if (you(a[j+1],a[j])==2)
{
swap(a, j, j+1);
}
}
}
for(int i=0;i<n;i++){
cout<<i+1<<" "<<a[i]<<endl;
}
delete []a;
return 0;
}
选择如下
#include <iostream>
using namespace std;
void swap(string a[], int i, int j)
{
string temp = a[i];
a[i] = a[j];
a[j] = temp;
}
int you(string a, string b) {
char* aa = &a[0];
char* bb = &b[0];
do
{
if (*aa < *bb)
{
return 2;
}
if (*aa > * bb) {
return 0;
}
aa++;
bb++;
} while (*aa || *bb);
return 0;
}
int main() {
int n;
cin >> n;
string* a = new string[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
cin.get();
}
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (you(a[j], a[i]) == 2)
{
swap(a, i, j);
}
}
}
for (int i = 0; i < n; i++)
{
cout << i + 1 << " " << a[i] << endl;
}
return 0;
}