Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组的高效间接排序_C++_Arrays_Sorting - Fatal编程技术网

C++ 数组的高效间接排序

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

例如,如果数组是这样存储的

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, 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元素的得分最高,而给定的解决方案将执行无效的内存访问,可能产生错误的答案或分段错误。