65,211
社区成员
发帖
与我相关
我的任务
分享
//楼主给的框架实在糟糕...下面这个勉强能跑.
#include <iostream>
#include <string>
#define NUMBER 5
using namespace std;
int marks[NUMBER];
string names[NUMBER];
bool flags[NUMBER];
int findPosition(int start, int end, int sortBy, int sorting_order)
{
int pos = start;
for (int i = start; i < end; ++i)
{
if (sortBy)
{
if (sorting_order)
{
if (names[i] < names[pos])
pos = i;
}
else
{
if (names[i] > names[pos])
pos = i;
}
}
else
{
if (sorting_order)
{
if (marks[i] < marks[pos])
pos = i;
}
else
{
if (marks[i] > marks[pos])
pos = i;
}
}
}
return pos;
}
void swap(int val0, int val1)
{
int ti;
string ts;
bool tf;
ti = marks[val0], marks[val0] = marks[val1], marks[val1] = ti;
ts = names[val0], names[val0] = names[val1], names[val1] = ts;
tf = flags[val0], flags[val0] = flags[val1], flags[val1] = tf;
}
void selectionSort(int* marks, string* names, bool* flags, int num, int sortBy, int sorting_order = true)
{
//sortBy是否按名字排序
//sorting_order是否从小到大排序
for(int i=0; i <num-1; i ++)
{
int pos = findPosition(i, num, sortBy, sorting_order);
swap(i, pos);
}
}
void getInput(int marks[], string names[], bool flags[], int num)
{
for(int i=0; i <num; i ++)
cin >> names[i] >> marks[i];
}
void printResult()
{
cout << "rank name mark" << endl;
for (int i = 0; i < NUMBER; ++i)
cout << i+1 << " " << names[i] << " " <<marks[i] << endl;
}
int main()
{
getInput(marks, names, flags, NUMBER);
bool sorting_order;
char temp_chr;
cin >> temp_chr;
if('a' == temp_chr || 'A' == temp_chr) sorting_order = true;
else sorting_order = false;
int sortBy;
cin >> sortBy;
if(1 == sortBy)
{
if(sorting_order)
selectionSort(marks, names, flags, NUMBER, 1, true);
else
selectionSort(marks, names, flags, NUMBER, 1, false);
}
else
{
if(sorting_order)
selectionSort(marks, names, flags, NUMBER, 0, true);
else
selectionSort(marks, names, flags, NUMBER, 0, false);
}
printResult();
}