C ++外部冒泡排序

时间:2015-12-15 05:15:34

标签: c++ sorting

对于我的编程项目,我应该编写一个程序来对磁盘上的整数进行排序(即离线排序)。我首先应该生成一些随机整数,写下所有这些整数,并读取其中两个整数进行交换,然后将它们写回磁盘,然后重复这些步骤直到数字排序。我可以很好地生成随机数,并且打开文件没有问题,但是当尝试写入文件时它会崩溃。这是我用来实现排序的程序代码的片段,它包含排序算法,以及崩溃我程序​​的代码段:

cell.layer.shouldRasterize = true
cell.layer.rasterizationScale = UIScreen.mainScreen().scale

它在代码行finout.write(reinterpret_cast(rand_ints),sizeof(int)* 1)崩溃;在第一个for循环(第52行)中,出现以下错误:ExternalSort.exe中0x55916D16(msvcp140d.dll)抛出异常:0xC0000005:访问冲突读取位置0x00000001。 有没有办法解决这个错误,并使这个排序程序工作?尝试了我可能尝试过的所有内容,但我无法看到一行代码导致程序崩溃或导致其他问题。

1 个答案:

答案 0 :(得分:1)

由于rand_ints的类型为int,因此您可能需要reinterpret_cast<char *>(&rand_ints)(请注意&)。否则,您将使用整数值制作指针。

OTOH,试图将两个相邻的整数读入单个整数变量的地址很可能会导致问题。

更深入地研究排序算法,在我看来,您试图将其概括为任何大小的数据元素,而不仅仅是int s。但是,它仍然显然是面向阵列的;如果你想处理文件,你可能必须传递文件名或fstream引用。

此外,除非您需要使用冒泡排序,否则我强烈建议您不要使用它,特别是对于磁盘排序,除非您确保您的数据集非常非常小(例如,不超过百数)。对于就地排序,我建议您使用快速排序。