C 如何使用合并排序在外部排序中对运行进行排序
我试图实现(在C中)一个数据库的外部排序算法,使用合并排序来完成大学作业。可用内存为C 如何使用合并排序在外部排序中对运行进行排序,c,database,mergesort,external-sorting,C,Database,Mergesort,External Sorting,我试图实现(在C中)一个数据库的外部排序算法,使用合并排序来完成大学作业。可用内存为buffSize块。我发现这个链接非常有用: 但我的问题是关于这行伪代码,在算法的第一阶段: 使用内存中的快速排序算法对数组进行排序 如果我无权使用我的buffSize空间以外的任何内存,因此我无法分配链接的a数组,那么我如何使用内存内排序过程(例如快速排序)对包含在这些块中的记录进行排序(然后将其存储在临时运行文件中)。在这种情况下,我的记录不是在连续数组中,而是在非连续内存块中,我不能直接应用qsort。有
buffSize
块。我发现这个链接非常有用:
但我的问题是关于这行伪代码,在算法的第一阶段:
使用内存中的快速排序算法对数组进行排序
如果我无权使用我的
buffSize
空间以外的任何内存,因此我无法分配链接的a
数组,那么我如何使用内存内排序过程(例如快速排序)对包含在这些块中的记录进行排序(然后将其存储在临时运行文件中)。在这种情况下,我的记录不是在连续数组中,而是在非连续内存块中,我不能直接应用qsort。有什么提示吗?外部排序的一般方法是:
您没有详细说明内存块的含义,但是有一个数组
a
,可以在内存中排序。因此,将数据读入数组。可以使用快速排序对数组进行排序。然后将阵列写入磁盘。重复读、排序、写,直到没有更多的输入数据。然后进行合并…如果要排序的数组是非连续的,并且如果不允许使用临时数组,那么您是对的,您不能使用qsort
。您必须编写自己的排序例程,将间隙考虑在内。为什么它是非连续的?我已经实现了外部合并排序,内存中的缓冲区是连续的。