【问题标题】:Qsort parallel arrays using pointers使用指针对并行数组进行 Qsort
【发布时间】:2013-02-10 10:58:31
【问题描述】:

我正在尝试在 C++ 中进行并行 qsort。我有一个排序好的数字数组,我想要一个并行的二维字符数组随着它的数字上下移动。这是我目前所拥有的。

    int compare (const void * a, const void * b)
    {
        //this is for qsort
        return ( *(int*)b - *(int*)a );
    }

    void sort_scores(char** myArray, int *votes)
    {
        qsort ((myArray, votes ), 5, sizeof(int), compare);
    }

我对数字进行了排序,但没有一次移动一个字符,我似乎无法让它发挥作用。非常感谢任何帮助。

【问题讨论】:

  • 您介意描述一下您要解决的问题吗?在我看来,您可以使用 std::map 或某些结构的向量。

标签: c++ 2d qsort


【解决方案1】:

您可以创建一个指向投票的指针数组(即指向votes 数组的每个元素的指针数组),而不是对投票本身进行排序,并对指针进行排序。 (请记住相应地更新比较函数!它现在将接收您必须转换为int ** 的参数)。 对新数组进行排序后,只需遍历它,并使用指针差异来获取原始数组中元素的索引。

【讨论】:

  • 我不确定我在最初的帖子中是否清楚我想要完成的工作。我传入一个整数数组,它排序很好,一个二维字符数组是平行的。这是作业,所以为了保持作业的精神,我必须使用两个单独的数组并并行进行某种排序。我被明确指示不要使用类对象,它必须是二维字符数组。如果我只是将它们放在字符串数组和数字数组中并进行冒泡排序,我想我会绕过学习体验的本质。
  • 在这种情况下,您将面临的主要问题是qsort 不支持。您可以 1)对索引进行排序(就像我建议的那样,或以任何其他方式 - 这是一种非常常见的技术,我相信您会找到足够的信息),或者 2)编写一个新的排序函数来交换并行数组中的元素,因为您在主数组中交换它们。后者可能是您正在寻找的,但是,正如我所说,它需要您编写一个排序函数,因为 qsort 不会帮助您。
猜你喜欢
  • 2014-07-04
  • 2021-11-21
  • 2017-04-19
  • 2011-02-03
  • 2021-08-02
  • 1970-01-01
  • 2015-12-13
  • 2011-03-30
相关资源
最近更新 更多