【发布时间】:2013-11-17 19:39:55
【问题描述】:
把它想象成一个对象数组。对象由类型和分数组成。 假设我需要相应地对它们进行排序,输入 a 或 b,给出优先级,然后按降序排列从 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,do while,while),代码量最少。我唯一想到的是通过将 a 组合在一起对数组进行排序,然后按 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;
}
}
}
后跟按 desc 顺序排序。我确信那里有更好的解决方案。任何人都可以分享您如何解决这个问题?
【问题讨论】:
-
为什么不能使用标准库?它的存在是有原因的。
-
查看en.wikipedia.org/wiki/Bubblesort 和en.wikipedia.org/wiki/Quicksort 获取一些排序算法的伪代码。冒泡排序更容易,快速排序更好。
-
std::sort(std::begin(array), std::end(array), [](const Object& l, const Object& r){ return l.type == r.type ? l.score < r.score : l.type < r.type;});
标签: c++