想象一下这是一个对象数组。对象由类型和分数组成。 假设我需要相应地对它们进行排序,要么键入a或b,给出优先级,然后按照desc顺序从0 -100得分。
[0] [1] [2] [3] [4] [5] [6]
----------------------------------------------
|a | b | a | a | b | b | a |
|50 | 90 | 30 | 80| 20 | 30 | 60 |
----------------------------------------------
排序后,它会是这样的。
[0] [1] [2] [3] [4] [5] [6]
----------------------------------------------
| a | a | a | a | b | b | b |
| 80 | 60 | 50 | 30 | 90 | 30 | 20 |
----------------------------------------------
只允许使用if else语句,例如使用最少量的代码循环(例如,for while,while)。我唯一想到的是通过将一个组合在一起对数组进行排序,然后在desc中进行排序。使用嵌套for循环,使用if else语句
char first, second;
for (int i = 0; i < count; i++)
{
first = array[i].getType();
for (int j = 0; j < count; j++)
{
second = array[j].getType();
if ((first.compare('a') == 0) && (second.compare('a') != 0) ||
(first.compare('a') != 0) && (second.compare('a') == 0))
{
Obj temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
然后按顺序排序。我相信那里有更好的解决方案。任何人都可以分享你如何解决这个问题?
答案 0 :(得分:0)
我认为最简单,最干净的方法是为您的类型定义一个比较运算符。
struct object
{
char type;
int score;
}
bool operator<(object const& l, object const& r)
{
return (l.type == r.type) ? l.score < r.score : r.type < l.type;
}
您可以将此与STL中的std::sort
算法一起使用:
vector<object> objs;
std::sort(objs.begin(), objs.end());
与C风格的数组一样。
如果你不被允许使用std::sort
(如在一些家庭作业中)那么你可以实现任何排序算法(bubblesort,quicksort等),并简单地比较两个object
与运算符&lt;
// dummy example
for(int i = 0; i < count; ++i)
{
for(int j = 0; j < count; ++j)
{
auto second = objs[j];
if(!(objs[i] < objs[j]))
std::swap(objs[i], objs[j]);
}
}