c++ - 根据另一个数组中的排序索引对数组重新排序

标签 c++

我正在执行二进制基数排序算法分配,但最后一步遇到问题。从我得到的指示来看,我知道我必须做什么,但不知道如何用 C++ 实现它。为了更好地理解我的要求,我举一个例子。假设我们有一个整数数组:

int array[5] = {5, 24, 8, 9, 10}

索引 0 处值为 5,索引 2 处值为 24,依此类推。 现在假设我将这些索引放入一个数组中并对它们重新排序(在我的例子中,对它们进行排序)

int indices[5] = {3, 4, 0, 1, 2}

我需要做的是,根据这些重新排序的索引,对初始数组重新排序。例如,由于索引 3 现在位于其数组中的索引 0 处,因此我必须将 9(在我的示例中位于索引 3 处)移动到其数组中的索引 1 处。最终的数组看起来像这样:

array[5] = {9, 10, 5, 24, 8}

我不确定这叫什么,所以我在网上找不到它。有人知道这个问题的答案吗?谢谢!

最佳答案

假设您不必就地执行此操作:

const int len = 5;
int newArray[len];

for(int i=0; i < len; ++i)
{
  newArray[i] = array[indices[i]];
}

memcpy(array,newArray,len * sizeof(int));

关于c++ - 根据另一个数组中的排序索引对数组重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60917343/

相关文章:

c++ - 在 C++ 和排序中使用原子的乐观锁定策略

c++ - 了解用于在 OpenGL 3.3+ 核心中使用三角形绘制四边形的代码

c++ - 如何为我的类(class)创建 endl 操纵器?

C++ - 将 float 转换为 unsigned char 数组,然后再转换回 float

类中的 C++ 对象构造

c++ - 如何将矩形附加到 QGraphicsView

c++ - 任意大小的枚举值

c++ - 为什么 std::string 使 WSAGetLastError 返回零?

c++ - 从单独的库调用 swprint 失败

c++ - ifstream 的 operator>> 来检测行尾?