磁盘分片归并排序函数
点击次数:35 次 发布日期:2008-12-01 12:46:52 作者:源代码网
|
可见,在DOS有限的内存条件下,磁盘文件分片归并排序是使用比较广泛的一种外存储器排序算法。现在计算机的物理内存一般足够大(最小的也有256MB吧),Windows的虚拟内存更是多达4个GB(对每一个应用程序而言),这对于很多磁盘文件的内存排序应该是足够了,况且现在的记录文件都放在各种数据库中,所以磁盘文件分片归并排序算法可能没有市场了(不过内存多路归并排序还是有市场的)。作为怀旧,把代码贴在这里,以免“失传”! /************************************************************************** * 文 件 名 : MERGE.H * * 编 制 人 : 湖北省公安县统计局 毛 泽 发 * * 日 期 : 1991.8 * **************************************************************************/ #define S_IREAD 0x0100 #define S_IWRITE 0x0080 #if defined(__TINY__) || defined(__SMALL__) || defined(__MENIUM__) #define SSIZE 25600 /* 排序缓冲区字节 */ #define NULL 0 #else #define SSIZE 65024 /* 排序缓冲区字节 */ #define NULL 0L #endif #define MAXMERGE 4 /* 排序合并每趟每次最大片 */ #define MAXMEREC (SSIZE / (MAXMERGE + 1)) /* 文件最大记录长 */ typedef int cdecl mercmpf(const void *, const void *); [Page] /* 通用排序函数. 参 数:排序文件名;原文件名;原文件头字节数;文件记录长;用户提供的比较函数. 返回值:成功 > 0;内存不够.记录超长返回 0;文件操作出错 -1 */ int fmerge(char *foname, char *finame, int ftops, int lrd, mercmpf *cmpf); /************************************************************************** * 文 件 名 : MERGE.C * * 编 制 人 : 湖北省公安县统计局 毛 泽 发 * * 日 期 : 1991.8 * **************************************************************************/ #include <io.h> #include <string.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include "merge.h" static mercmpf *mercmp = NULL; /* 比较函数 */ static char *merbuf = NULL; /* 排序动态缓冲区 */ 源代码网供稿. |
