C++ 排序整型数组标记结构数组(或两个)

C++ 排序整型数组标记结构数组(或两个),c++,algorithm,arrays,sorting,C++,Algorithm,Arrays,Sorting,因此,我们的想法是使用一个大型结构的元素对该结构进行排序,以便于邮政编码 为了保持简单,让我们假设有两个数组,一个包含邮政编码的整数和两个更大的结构(3k字节)数组 使用快速排序对整数数组进行排序是适当的快速,但是标记结构数组可能比在整数数组交换元素时简单地交换元素要好一些 在测试随机3000个元素的整数数组时,需要12000次交换才能完成排序。多次交换整个结构会导致性能下降(特别是在有许多元素的情况下) 理想情况下,我只需要对指针数组进行排序,但在本例中,我实际上必须返回一个排序结构数组,而不

因此,我们的想法是使用一个大型结构的元素对该结构进行排序,以便于邮政编码

为了保持简单,让我们假设有两个数组,一个包含邮政编码的整数和两个更大的结构(3k字节)数组

使用快速排序对整数数组进行排序是适当的快速,但是标记结构数组可能比在整数数组交换元素时简单地交换元素要好一些

在测试随机3000个元素的整数数组时,需要12000次交换才能完成排序。多次交换整个结构会导致性能下降(特别是在有许多元素的情况下)

理想情况下,我只需要对指针数组进行排序,但在本例中,我实际上必须返回一个排序结构数组,而不是一个排序指针数组。如果没有其他内容,则这是对标记数组进行排序的练习

一种方法是标记一个次整数数组,然后使用数组中的顺序对结构中的元素进行洗牌,这样每个元素只移动一次

我在网上找不到什么帮助


对于优雅设计的建议,我们将不胜感激。

在上述内容中,您应该真正使用std::Vector,而不是数组。我无法想象为什么不能返回指针的(const)向量,但如果是这种情况,请使用指针向量,只对指针进行排序,然后在排序时,将得到的排序结构复制到另一个向量中并返回,这意味着每个向量条目只有一个副本。

在上面的例子中,您应该真正使用std::vectors,而不是数组。我无法想象为什么不能返回指针的(const)向量,但如果是这种情况,请使用指针向量,只对指针进行排序,然后在排序时,将结果排序的结构复制到另一个向量并返回,这意味着每个向量项只需一个副本。

如果要避免交换开销,你可以试试。这种排序算法将找到一个值并立即将其放入正确的位置,只执行一次交换,因此,我相信,尽可能减少交换次数。

如果您想避免交换开销,可以尝试。这种排序算法将找到一个值并立即将其放入正确的位置,只执行一次交换,因此,我相信,尽可能减少交换次数。

您可以将其放入std::list中,然后为排序定义比较函数。它应该只交换指向每个节点的指针,而不是结构。指针交换是一个快速的2或3操作函数。

您可以将其放入std::list中,然后为排序定义比较函数。它应该只交换指向每个节点的指针,而不是结构。交换指针是一个快速的2或3操作功能。

谢谢。是的,我可以将元素复制到另一个数组中,但我想尝试就地执行。该数组可能会受到过滤操作的影响,在过滤操作中,它的大小会以复杂的方式减小。这可以通过从指针数组中收集元素来实现,但我被告知代码重写将是非常重要的。我的任务是在约束范围内尽我所能做到最好。我看不出在不交换实际结构数据的情况下,你怎么可能做到这一点。好吧,想法是生成一个整数数组,将旧位置映射到新位置。然后,如果将第一个元素存储在缓冲区中,则可以将替换它的元素移动到其插槽中,然后移动替换该元素的元素,依此类推,最后将被缓冲的元素放入其位置。谢谢。是的,我可以将元素复制到另一个数组中,但我想尝试就地执行。该数组可能会受到过滤操作的影响,在过滤操作中,它的大小会以复杂的方式减小。这可以通过从指针数组中收集元素来实现,但我被告知代码重写将是非常重要的。我的任务是在约束范围内尽我所能做到最好。我看不出在不交换实际结构数据的情况下,你怎么可能做到这一点。好吧,想法是生成一个整数数组,将旧位置映射到新位置。然后,如果将第一个元素存储在缓冲区中,则可以将替换它的元素移动到其插槽中,然后移动替换该元素的元素,依此类推,最后将被缓冲的元素放入其位置。