SORT整数数组标记结构数组(或两个)

时间:2009-08-06 10:53:11

标签: c++ algorithm arrays sorting

因此,我们的想法是使用该结构的元素对大型STRUCTURE进行排序,以获得Zip Code的参数。

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

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

在测试随机3000元素整数数组时需要12000个交换来实现完整的排序。如果存在许多元素,则多次交换整个结构会产生性能损失。

理想情况下,我只是对一个指针数组进行排序,但在这种情况下,我实际上必须返回一个排序结构数组,而不是一个排序指针数组。如果没有别的,这是对标记数组进行排序的练习。

一种方法是标记一个辅助整数数组,然后使用其中的顺序来混洗结构的元素,从而只移动每个元素一次。

我在网上找不到太多帮助 http://rosettacode.org/wiki/Sorting_an_Array_of_Integers#C

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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