C++ 数组的高效间接排序
例如,如果数组是这样存储的 ex)输入 我想按数量级打印第二个数组的idx (ex)输出C++ 数组的高效间接排序,c++,arrays,sorting,C++,Arrays,Sorting,例如,如果数组是这样存储的 ex)输入 我想按数量级打印第二个数组的idx (ex)输出 这样做的有效方法是什么?假设您的数字存储在数组a中: int a[10] = {7, 5, 3, 9, 1, 2, 4, 8, 6, 0}; sort(b, b+10, [a](int i, int j){ return a[i] > a[j]; }); 您希望将排序后的索引存储在数组b中,该数组最初按顺序包含所有索引: int b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8
这样做的有效方法是什么?假设您的数字存储在数组
a
中:
int a[10] = {7, 5, 3, 9, 1, 2, 4, 8, 6, 0};
sort(b, b+10, [a](int i, int j){ return a[i] > a[j]; });
您希望将排序后的索引存储在数组b
中,该数组最初按顺序包含所有索引:
int b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
然后,您可以根据数组a
中的相应值对索引数组b
进行简单排序:
int a[10] = {7, 5, 3, 9, 1, 2, 4, 8, 6, 0};
sort(b, b+10, [a](int i, int j){ return a[i] > a[j]; });
完整演示不清楚您想问什么…使用
std::shuffle
他要求hot执行间接排序,即保留数组元素的原样,但对索引数组进行排序。不确定问题中有什么不清楚。请注意,虽然此解决方案解决了问题中给出的特定情况,但它没有解决间接排序的一般问题,即您希望通过另一个数组中的“分数”值对一个数组的元素重新排序。例如,如果将数组b中的值3替换为42,则一般的间接排序算法将输出“42,7,0,…”,因为42元素的得分最高,而给定的解决方案将执行无效的内存访问,可能产生错误的答案或分段错误。