C 如何使用合并排序在外部排序中对运行进行排序

C 如何使用合并排序在外部排序中对运行进行排序,c,database,mergesort,external-sorting,C,Database,Mergesort,External Sorting,我试图实现(在C中)一个数据库的外部排序算法,使用合并排序来完成大学作业。可用内存为buffSize块。我发现这个链接非常有用: 但我的问题是关于这行伪代码,在算法的第一阶段: 使用内存中的快速排序算法对数组进行排序 如果我无权使用我的buffSize空间以外的任何内存,因此我无法分配链接的a数组,那么我如何使用内存内排序过程(例如快速排序)对包含在这些块中的记录进行排序(然后将其存储在临时运行文件中)。在这种情况下,我的记录不是在连续数组中,而是在非连续内存块中,我不能直接应用qsort。有

我试图实现(在C中)一个数据库的外部排序算法,使用合并排序来完成大学作业。可用内存为
buffSize
块。我发现这个链接非常有用:

但我的问题是关于这行伪代码,在算法的第一阶段:

使用内存中的快速排序算法对数组进行排序


如果我无权使用我的
buffSize
空间以外的任何内存,因此我无法分配链接的
a
数组,那么我如何使用内存内排序过程(例如快速排序)对包含在这些块中的记录进行排序(然后将其存储在临时运行文件中)。在这种情况下,我的记录不是在连续数组中,而是在非连续内存块中,我不能直接应用qsort。有什么提示吗?

外部排序的一般方法是:

  • 读取阵列内存中所能容纳的数据量
  • 分类
  • 将其写入临时文件(跟踪名称、大小和最大记录等)
  • 返回到步骤1,直到数据结束
  • 为写入的文件设置合并树,以便进行最少的合并
  • 从每个第一(仅?)合并阶段输入文件中读取一行
  • 将最小的(升序排序)写入下一个临时文件(或最终文件)
  • 获取新记录以替换刚写入的记录
  • 返回步骤7,直到没有更多数据可读取
  • 返回步骤6继续合并,直到完成

  • 您没有详细说明内存块的含义,但是有一个数组
    a
    ,可以在内存中排序。因此,将数据读入数组。可以使用快速排序对数组进行排序。然后将阵列写入磁盘。重复读、排序、写,直到没有更多的输入数据。然后进行合并…

    如果要排序的数组是非连续的,并且如果不允许使用临时数组,那么您是对的,您不能使用
    qsort
    。您必须编写自己的排序例程,将间隙考虑在内。为什么它是非连续的?我已经实现了外部合并排序,内存中的缓冲区是连续的。