如何对具有重复值的数组进行排序
How can I order an array with duplicate values?
我想订购一个可能有重复项的填充数组。例如:
int values[5] = {4, 5, 2, 5, -1};
int expected[5] = {1, 2, 0, 2, -1};
这里2是最小的元素,所以它的阶数是0。4是第二小的,所以它的阶数是1。5是第三小的,我希望它们的顺序都是2。我想跳过某些元素(上例中为-1),这样这些元素的顺序将为-1。
我该如何在C++中做到这一点,或者描述一个算法?
感谢
只需对数组进行排序,然后为每个元素分配其秩:
vector<int> v(values, values + 5);
v.push_back(-1);
sort(begin(v), end(v));
v.resize(unique(begin(v), end(v)) - begin(v));
for (int i = 0; i < 5; ++i)
expected[i] = lower_bound(begin(v), end(v), values[i]) - begin(v) - 1;
这假设所有元素都是非负的或-1。如果有小于-1的负元素,则需要对-1进行特殊处理。
相关文章:
- 显示错误输出的简单数组排序程序
- C 使用单个函数对具有多种值类型的数组排序
- 2D数组排序,空格打乱顺序
- C 2D数组排序
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 数组排序功能
- CString 数组排序
- 简单的数组排序/检查 划分和征服版本
- C++ 中的多维数组排序
- 选择在++中对并行数组排序
- C++:二维指针数组排序:选择排序不适用于某些实例
- C++字符串数组排序
- C++中的指针数组排序算法
- 在VC++6中使用向量进行数组排序时出错,而在VC++2012中没有错误
- 将索引数组排序为主数组
- 数组排序、数组输入、数组输出
- C++数组排序,内存错误
- 在嵌入式系统上将数组排序功能从c++移植到c
- 基于其他int数组排序
- 多维数组排序c++奇怪行为